2011-12-14 32 views
0

"()"内のテキストのみを取得するには たとえば、 "en"から "en"だけを入力します。 このパターンは"/\(.[a-z]+\)/i"と書かれていますが、 "()"も得られます。正規表現は文字列の一部を取得

ありがとうございます。

答えて

2
<?php 

$string = '(en) English'; 

preg_match('#\((.*?)\)#is', $string, $matches); 

echo $matches[1]; # en 

?> 

$matches[0]()間この場合(.*?)全体マッチストリング、$matches[1]する最初基を含有するであろう。

+0

の文字(をチェックします。 – Powertieke

0

それは仕事をする必要があります。

"/\(([a-z]+)\)/i" 
0

最も簡単な方法は、"/\(([a-z]+)\)/i"を取得し、必要なものを取得するためにキャプチャグループを使用することです。誰もが他の

OR

を提案しているよう

そうでない場合、あなたは、先読みに取得する必要が見える尻

0

は、あなたは、あなたのマッチがある場合は、あなたの試合にのみ確認することができますキャプチャグループを使用することができます「(」の後に「)」が付いています。それはルックアヘッドとルックバックと呼ばれています。

"/(?<=\().[a-z]+(?=\))/i" 
1

あなたの正規表現のドットは何ですか、私は間違ってそこに仮定します。

第2に、キャプチャグループの回答(これは完璧です!)の代わりに、lookbehindとlookaheadを使って解決する方法です。

(?<=\()[a-z]+(?=\)) 

here on Regexr

ここのトリックにそれを参照してくださいされており、それらの前後参照は、彼らが存在する場合、彼らはちょうどチェックし、内部の文字と一致していません。したがって、これらの文字は結果に含まれません。

(?<=\()その位置の前の文字(ため

(?=\)をチェックするアサーションの背後にある正見、正先見アサーション、先後読み/先読み私の意見ではそれより読みやすくその位置

関連する問題