自分のお店を開く時の心構えとは? >>

質問させてください。

abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" asdakjsd

のような文字列があります。
これの、"(ダブルクォーテーション)で囲まれている文字列を取得したいのですが、正規表現がうまくいきません。
取得結果としてはは、xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh の部分がほしいです。

preg_match('/"([.*])"/', $str, $matches);とやったり
preg_match('/\"([.*])\"/', $str, $matches);とやったり
preg_match('/\"([.*?])\"/', $str, $matches);とやったりしたのですが、
どうしても$matchesにほしい結果は入っていません。

どのような正規表現で取得可能でしょうか?

何卒ご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

preg_match('/"(.*?)"/', $str, $matches);


でよいのでは?
    • good
    • 2
この回答へのお礼

ありがとうございます!取得できました!!
ちなみに欲を言うようですが、$maches[0]にはダブルクォーテーションもついた取得結果が格納されますが、
この最初と最後についたダブルクォーテーションを取り除いた結果を一発で取得というのはできないものでしょうか?
やはり取得後に、ダブルクォーテーションを削除する必要がありますでしょうか。

お礼日時:2008/02/06 15:21

<?php


$str = 'abcdef -s "xsalkjsdflsd#$%_asdasdlasdlakjsd&=Daskdjh" "aiueo" asdakjsd';

$result = preg_match('/"(.*?)"/', $str, $matches);

echo $matches[1];

これじゃダメですか。
    • good
    • 0
この回答へのお礼

ありがとうございます!
$maches[1]に入っているのですね。。。
PHPのマニュアルは読んでいたはずなのですが、盲点でした。
おかげで期待通りの結果を取得できました!

お礼日時:2008/02/06 16:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現で囲まれた部分の文字列

正規表現でダブルコーテーションで囲まれた部分の文字列
を検索したいのです。
\"([^\"])*\"
とりあえずこんな感じで検索はできるのですが
問題はダブルコーテーションで囲まれた部分の
エスケープ文字\の判定が上手くできません。
([^\"])
この部分でダブルコーテーション以外の文字列、
ただし\"は除くって感じにしたいのですがどうすれば良いでしょうか。
宜しくお願いします。

正規表現のエンジンはBREGEXP.DLLです。
http://www.hi-ho.ne.jp/babaq/bregexp.html

Aベストアンサー

([^\"])

(\\\"|[^\"])
としたらでどうでしょうか。

Qダブルクォーテーションを含む正規表現について。

正規表現によるマッチング(?)を勉強しています。

例えば「blog」という文字列で、マッチングを試みる場合は、
String str = "blog";
で、strに格納すると思うのですが、例えば「link rel=""」という文字列でマッチングを試みる場合はどうすればいいのでしょうか?
「""」の部分をそのまま文字列のダブルクォーテーションの中に入れると、エラーになってしまうので、何か別のやり方が必要だと思うのですが、わかりません…。

Aベストアンサー

もとい

”abc"abc”は”abc\"abc”と記述します

Q正規表現 ""で囲まれた内部は処理しない方法

正規表現でタグ内の項目内容に""をつける処理を考えています。

現在は、= の右側にある内容を""で囲む処理をしています。

C#で書いたコードは次ような感じです。
text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline);

このときに次のようなHTMLコードがあった場合、

 <div id=000 class="tayp1,type2">
 <div id="111" class=type1>
 <img src="200.gif" alt="100+100=200">

すると次のような結果になります。

 <div id="000" class="tayp1,type2">
 <div id="111" class="type1">
 <img src="200.gif" alt="100+100="200"">

3行目はalt内にも=があるため間違った処理をしてしまいます。
誤:alt="100+100="200""

このような""内部は処理しないようにするにはどうすればよろしいでしょうか?
""内部の=にはヒットしななれば…と思っているのですが。

よろしくお願いします。

正規表現でタグ内の項目内容に""をつける処理を考えています。

現在は、= の右側にある内容を""で囲む処理をしています。

C#で書いたコードは次ような感じです。
text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline);

このときに次のようなHTMLコードがあった場合、

 <div id=000 class="tayp1,type2">
 <div id="111" class=type1>
 <img src="200.gif" alt="100+100=200">

すると次のような結果になります。

 <div id="000" class="tayp1,type2">
 <div id="111...続きを読む

Aベストアンサー

#1,#2です。お書きの部分が、[^\"' >]+ となっていたので、空白は除外かと思っていました。
最初から"で囲まれていた場合は、先にマッチさせて元と同じ物に置換すれば良いですね。

text = Regex.Replace(text, "(\\s\\w+)=\"([^\"]*)\"|(\\s\\w+)=([^\"' >]+)","$1$3=\"$2$4\"" ,RegexOptions.Singleline);

かな。
' で囲まれた物も対象にしたければ同じ調子で。

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

Q「"」(ダブルクォーテーション)で囲まれた「,」をキャンセルしてcsvの値を抽出するには

111,"あいうえお",,"さしす,せそ"

のテキストファイルを

value[0] = 111
value[1] = あいうえお
value[2] =
value[3] = さしす,せそ

いう形に配列に入れたいと思っています。見てもらえばわかると思いますが、数字には「"」(ダブルクォーテーション)が付かなくて、「"」の中に入っている「,」(カンマ)は区切り記号とはみなされず値として取り込んでいます。

splitの正規表現など使えないか苦悩しています。いまだ解決方法見つけられず。
テキストファイルの「"」(ダブルクォーテーション)有り/無しや順番などは都度変更されます。

カンマ区切りで、「"」(ダブルクォーテーション)で囲まれた部分は外して値を取り出すにはどうしたらいいのでしょう?

ご存知の方、ご教授ください。

Aベストアンサー

テキストファイルは別なのですよね?

<?PHP
$handle = fopen("test.csv", "r");
while (($value = fgetcsv($handle, 1000, ",")) !== FALSE) {
print_r($value);
}
fclose($handle);
?>

Qダブルクォートで囲まれた文字列の取り出し

Windows環境でRuby 1.8.7を使用しております。

----sample1.txt-----
hoge"foo\"bar\"foo"hage"bar\"baz\"bar"hoge
------------------

ファイルから1行ずつテキストを読み込んで処理を行います。上のsample.txtの様な行を読み込んだ場合にダブルクォートで囲まれた部分
foo\"bar\"foo
bar\"baz\"bar
を取り出すのにはどの様な正規表現を用いればよろしいでしょうか?
エスケープされたダブルクォートを除ける上手い方法がわかりません。


また、ダブルクォートで囲まれた部分が複数行にまたがる場合はどの様に処理をすれば良いでしょうか?
-----sample2.txt-----
hoge"foo
\"bar\"
baz"
hage
----------------------
-----sample3.txt-----
hoge"foo
\"ba
r\"baz"
hage
----------------------
最初の例のように1行の場合は
File.foreach(file) do | line | …… end
で良いのですが、複数行の場合には同じように単純には行きません。
ダブルクォートの数を数えて、奇数の場合は偶数になるまで次行をくっつける様な処理を考えているのですが、もっと適切な方法はありますか?

宜しくお願いします。

Windows環境でRuby 1.8.7を使用しております。

----sample1.txt-----
hoge"foo\"bar\"foo"hage"bar\"baz\"bar"hoge
------------------

ファイルから1行ずつテキストを読み込んで処理を行います。上のsample.txtの様な行を読み込んだ場合にダブルクォートで囲まれた部分
foo\"bar\"foo
bar\"baz\"bar
を取り出すのにはどの様な正規表現を用いればよろしいでしょうか?
エスケープされたダブルクォートを除ける上手い方法がわかりません。


また、ダブルクォートで囲まれた部分が複数行にまたがる...続きを読む

Aベストアンサー

前者については
"((?:[^\\"]|\\.)*)"
にマッチさせればいいと思う. 後者は「全体を 1つの文字列にする」のが最も単純ではないでしょうか.

Qダブルコーテーション(

str_replace関数にてダブルコーテーション(")を空白文字列に置換したいのですが、
どのような手法を取ればよろしいのでしょうか?

str_replace(""", "", $file);
ではないことは確認しているのですが。。
ご教授お願いします。

Aベストアンサー

rapid6さんこんにちは。


str_replace("\"", "", $file);

str_replace('"', "", $file);


今回のようにダブルクォーテーションの中でダブルクォーテーションを使おうとする場合は、
エスケープ文字(\)でエスケープしてやる必要があります。

シングルクォーテーションの中でシングルクォーテーションを使用する場合も同じようにエスケープする必要があります。

このあたりは エスケープ文字 などで検索すると詳しくわかると思います。

Qダブルクォーテーションのreplaceの方法

JavaScriptで文字を置換する際に
AAA = new String(AAA).replace(/ZZZ/g, "QQQ");
にしますよね、これで文字列中のダブルクォーテーション「"」を
任意の文字に変換したいのですが、何か良い方法はないでしょか?

よろしくお願いします。

Aベストアンサー

AAA.replace(/\"/g,"Q");
このように「"」の前に\をつけるといいですよ。

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Q正規表現でシングルクォーテーション内の文字列を取る

正規表現でどうしても分からない状態です。よろしくお願いします。

PHP5.2で、

'You\'re pen'

というシングルクォーテーションで囲まれた文字列を
正規表現で取得しようとしています。

preg_match_all("/\'([^\']*|\\\')*?\'/", $src, $matches);

のようにしていますが、どうしても

'You\'

までしか取れません。
どうしたら取れるでしょうか。。m(_ _)m

Aベストアンサー

preg_match_all("/'([^'\\\\]|\\\\\\\\|\\\\')*?'/",$src,$matches);

まず、 " " で囲んだ文字列の中の ' はエスケープ不要です。
正規表現で、\ 自身を表すためには \\ とする必要がありますが、\\ を引用符で囲まれた文字列で表すためには、\\\\ と書きます。
同じように"で囲んだ正規表現で \\ という文字列を表すのは \\\\\\\\ となります。

上記は ' で以下のものを囲んだ文字列にマッチします。
(1) ' でも \ でも無い文字
(2) \\ で \ 自身を表す
(3) \' で ' を表す


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報