2011-10-24 21 views
1

私はすべてのPHPファイルで、i18n関数内の文字列を見つけようとしています。次に例を示します。大括弧で囲まれたテキストを一重引用符または二重引用符で囲みます

$string = '__("String 2"); __("String 3", __("String 4"));' . "__('String 5'); __('String 6', __('String 7'));"; 

var_dump(preg_match_all('#__\((\'|")([^\'"]+)(\'|")\)#', $string, $match)); 
var_dump($match); 

私はこの結果を取得したい:

array 
    0 => array 
     0 => string 'String 2' (length=8) 
     1 => string 'String 3' (length=8) 
     2 => string 'String 4' (length=8) 
     3 => string 'String 5' (length=8) 
     4 => string 'String 6' (length=8) 
     4 => string 'String 7' (length=8) 

をしかし残念ながら、私はこの結果を事前に

array 
    0 => array 
     0 => string '__("esto es una prueba")' (length=24) 
     1 => string '__("esto es una prueba 2")' (length=26) 
     2 => string '__("prueba 4")' (length=14) 
     3 => string '__('caca')' (length=10) 
     4 => string '__('asdsnasdad')' (length=16) 
    1 => array 
     0 => string '"' (length=1) 
     1 => string '"' (length=1) 
     2 => string '"' (length=1) 
     3 => string ''' (length=1) 
     4 => string ''' (length=1) 
    2 => array 
     0 => string 'esto es una prueba' (length=18) 
     1 => string 'esto es una prueba 2' (length=20) 
     2 => string 'prueba 4' (length=8) 
     3 => string 'caca' (length=4) 
     4 => string 'asdsnasdad' (length=10) 
    3 => array 
     0 => string '"' (length=1) 
     1 => string '"' (length=1) 
     2 => string '"' (length=1) 
     3 => string ''' (length=1) 
     4 => string ''' (length=1) 

感謝を取得します。

答えて

1
preg_match_all('/(?<=\(["\']).*?(?=[\'"])/', $subject, $result, PREG_PATTERN_ORDER); 
$result = $result[0]; 

シンプルです。

私は試合へのエントリポイントとしてを使用しています注意してください。あなたはより多くのエキゾチックな入力を持っている場合は、あなたがそれを提供する必要があります。

+0

ありがとう...完璧に動作します – toledorobia

+0

@toledorobia問題はありません。 – FailedDev

0

の引用符をキャプチャしないでください。

preg_match_all('#__\([\'"]([^\'"]+)[\'"]\)#', $string, $match); 

はまた、異なる出力形式のためpreg_match_all()ためフラグパラメータを見てみましょう。

+0

おかげで...ほぼ完璧な...しかし、正規表現を無視**文字列3 **と**文字列6 **閉じる引用符の後にコンマがあるので... – toledorobia

関連する問題