[英]Regular Expression Replace a group: varying the output depending upon what it matches
正则表达式替换组:根据匹配的内容更改输出
使用PHP Live Regex时-用于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)
预先感谢您对这个问题的帮助。
麦克风
PCRE引擎不支持条件替换模式。 在PHP中,您只需要使用preg_replace_callback
并根据$matches[4]
(下面使用$m[4]
)值将第4组替换为正确的值。
看一个PHP演示 :
$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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.