2012-06-28 5 views
7

これは本当に簡単な問題ですが、どこでも解決策を見つけることができませんでした。PHP/REGEX:カッコ内の文字列を取得

私はpreg_matchまたはpreg_match_allを使用して、かっこ内から文字列を取得しようとしています。括弧は付きません

はこれまでのところ、私の式は次のようになります。

\([A-Za-z0-9 ]+\) 

と、次の結果を返します。

3(中空ハイライト)928から129(< - 元の文字列)

を(中抜きハイライト)(< - 結果)

私は括弧内の文字列が括弧なしで欲しいです。私はおそらくstr_replaceか何かでその後に括弧を置き換えることができますが、それは私にとって非常にエレガントな解決策ではないようです

中空ハイライト

:それは次のようになります。

追加する必要があるので、かっこは結果に含まれません。

あなたのおかげで、皆さんは素晴らしいです! :)

+0

あなたはブラケットを呼んでいる実際に何がカッコされています。 – JohnK

+2

[PHP:カッコ内にテキストを抽出するには?](https://stackoverflow.com/questions/196520/php-best-way-to-extract-text-within-parenthesis) – EdChum

答えて

12

あなたは自分のエスケープ括弧に加えて、括弧をキャプチャ追加する必要があります。

<?php 
    $in = "hello (world), my name (is andrew) and my number is (845) 235-0184"; 
    preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $in, $out); 
    print_r($out[1]); 
?> 

この出力:

Array ([0] => world [1] => is andrew [2] => 845) 
+0

あなたの答えをありがとう。これは素晴らしい(エスケープされたバックスラッシュに加えて)効果があります。しかし、括弧はどのように役立ちますか?私は私の表現が次のように読まれたと思った: "開いた括弧の後ろに文字、数字、スペースで構成され、その後に閉じた括弧が続く"。ここではどのように(エスケープされていない)括弧が使われていますか?ご協力ありがとうございました! :) – Macks

+1

おっと、エスケープされたバックスラッシュについては申し訳ありません。今すぐ修正。非エスケープブラケットには特別な意味があります。デフォルトでは、マッチ全体が '' [0] ''に取り込まれているので、 '' $ out [0] ''にはすべてが含まれています。それらの間にあるものをすべてキャプチャし、それらを順次配列インデックス、すなわち '' [1] ''、 '' [2] ''、 '' [3] ''等たとえば、文字列が "abc123def456"で正規表現が ''/abc(\ d +)(\ d +)(\ d)(\ d +)/ ''なら、 '' = "123"、 '' [2] '' = "def"、 '' [3] '' = "4"、 '' [4] '' = "56" –

+0

'' preg_match''と '' preg_match_all''の違いは、後者は、名前が示唆しているように、すべてが一致するため、配列内に配列が存在することです。 '' [1] = {"world" 、 "andrew"、 "845"} ''。 –

22

試してみてください。

preg_match('/\((.*?)\)/', $s, $a); 

出力:

Array 
(
    [0] => (hollow highlight) 
    [1] => hollow highlight 
) 
+0

ありがとう助けて! :) – Macks

+0

ありがとう、これは私のために働いた – itsandy

+0

あなたは本当に私の日を保存しました:) – Hossein

関連する問題