2011-10-24 70 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 **和** String 6 **,因爲在收盤引號後面有一個逗號... – toledorobia