2012-02-05 10 views
0

通常の表現を使用して文字列内のテキストを選択しようとしていますが、私はそれを引き出しています。それはクレイジーです。単純な正規表現 'select' x in string

私は、 'すべて' のテキストは(「」)whithin私は

$text = 'jow this should match ("text") and not (this) also not "this"'; 
preg_match($pattern, $text, $match); 
echo $match[1]; 

何$パターンを使用する必要がありますしたいですか?

私は狂気ここに行くよ助けてください...

Thxを、

+0

あなたが使っている '$パターン 'を見せたら助けになります。 – Tomalak

答えて

1
$text = 'jow this is some ("text") and some other text'; 
$pattern = '/\("([^"]*)"\)/'; 
preg_match($pattern, $text, $match); 
echo $match[1]; 
+0

Thxは動作しますが、これが$ text - 'jowの場合、これはいくつかの( "text")といくつかの( "other")テキストです。 私は1つしか一致していません、$ match [2]は空ですか? – kevinius

+0

[preg_match_all()](http://php.net/preg_match_all)を使用すると、$ match [1]はすべての一致する値の配列になります。 – nachito

-1

これを試してみてください:

\"[a-z]*[A-Z]*[0-9]*\" 
+0

あなたが意味するのは '\" [a-zA-Z0-9] * \ "'ですが、その場合でも囲む '(...)'リテラルがなくなります。 – Regexident

+0

ああ、(と):/ –

1

はこのようなものを介して動作するために、私はに行く傾向にありますオンラインの正規表現ツール、または私は正規表現を分離するために使用している言語で、小さな学術プログラムを作成します。これについては、http://regexpal.com/を使用しました。

あなただけの括弧と二重引用符で囲まれている値と一致する場合、これはあなた

\(".*?"\) 

のために働く必要がありますが(\とプリペンド)を「エスケープ」する必要があり、あなたの正規表現で括弧理由括弧は正規表現のメタ文字です。 。*の後に疑問符を付けると、星(0以上)の量指定子は貪欲ではありません。それがなければ、

this ("stuff") would not be ("captured") together 

のようなフレーズは、別途

("stuff") would not be ("captured") 

代わりの

("stuff") 

("captured") 

にマッチします。

私があなたの質問から得られなかったことの1つは、あなたが( "..")の間でテキストを一致させるかキャプチャしようとしているかどうかです。取り込みたい場合は、あなたがこのように括弧の別のセット(この時間エスケープされていない)を追加する必要があります。

\("(.*?)"\) 

私はPHPはそれをしないかどうかはわかりませんが、他の言語が一致するグループオブジェクトまたはにこれを入れますキャプチャされたアイテムごとに$ 1、$ 2などのような魔法の変数があります。物事をまっすぐにするためには、それを周りに遊ばなければならないでしょうが、この正規表現はあなたの質問を読んでから必要なものを得るはずです。