2017-09-29 14 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) 

感謝をこの問題の助けになるために事前に

マイク

答えて

2

PCREエンジンは条件付き置換パターンをサポートしていません。 PHPでは、preg_replace_callbackを使用し、(以下、$m[4]が使用されます)の値に基づいて、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

ウィクトル助けてくれてありがとう、これは確かに私を助けました。マイク –

関連する問題