2017-09-29 60 views
1

正則表達式替換組輸出:變化取決於它所匹配正則表達式替換組:不同取決於它所匹配

的輸出,同時使用PHP Live Regex - A live Regular Expression Tester for PHP

我無法獲得最終組取決於遇到的表達式而用變量輸出替換。我不確定如何格式化最後一個替換組,以便它不輸出文字值。

我想要做這樣的事情:

Regular Expression: 
('group1',) (group2,) (group3,) (alpha|beta|charlie) 

Replace with: 
$1 $2 $3 (1|2|3) 

,並希望這樣的結果:

Example 1: 
Source: 'group1', group2, group3, alpha 
Result: 'group1', group2, group3, 1 

Example 2: 
Source: 'group1', group2, group3, beta 
Result: 'group1', group2, group3, 2 

etc. 

但是,相反,我得到這樣的:

Example 1: 
Source: 'group1', group2, group3, alpha 
Result: 'group1', group2, group3, (1|2|3) 

Example 2: 
Source: 'group1', group2, group3, beta 
Result: 'group1', group2, group3, (1|2|3) 

謝謝提前幫助解決這個問題。

Mike

回答

2

PCRE引擎不支持條件替換模式。在PHP中,您只需使用preg_replace_callback,並根據$matches[4](下面使用的$m[4])值取代第四組使用正確的值。

參見一個PHP demo

$string = "'group1', group2, group3, alpha 'group1', group2, group3, beta"; 
$pattern = "/('group1',) (group2,) (group3,) (alpha|beta|charlie)/i"; 
$data = array("alpha" => "1", "beta" => "2", "charlie" => "3"); 
$inc = 0; 

echo preg_replace_callback($pattern, function ($m) use ($data) { 
     return $m[1] . " " . $m[2] . " " . $m[3] . " " . $data[$m[4]]; 
    }, $string); 

輸出:'group1', group2, group3, 1 'group1', group2, group3, 2

+1

Wiktor,感謝您的幫助和示例,這當然幫助了我。麥克風 –

相關問題