繁体   English   中英

正则表达式替换组:根据匹配的内容更改输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM