如何将preg_replace用于具有或条件的模式?

时间:2018-09-12 11:01:44

标签: php regex string preg-replace

我想用条件如下的单词替换字符串的一部分:

"string1string" => "stringAstring"
"string2string" => "stringBstring"
"string3string" => "stringCstring"

我为第一个字符串选择此模式:

/(.*)(1|2|3)(.*)/

所以我想通过1,2,3函数将A,B,C替换为preg_replace()。 请帮助我做到这一点。

修改:首次尝试

我使用下面的代码来实现

preg_replace("/(.*)(1|2|3)(.*)/", "$1$2$3", $string);

“ string1string”的结果为:

string1string

我的目标是,如果$21,那么用A替换,或者2B替换,还是3用{{ 1}}

2 个答案:

答案 0 :(得分:1)

我将总结您的问题。您需要用多个字符替换多个数字

如果有数组,则应使用循环并在循环中添加以下代码,并用变量替换string1string

因此,您应将str_replacearray一起使用

$string = str_replace(array('1', '2', '3'), array('A', 'B', 'C'), 'string1string');
print_r($string);
$string = str_replace(array('1', '2', '3'), array('A', 'B', 'C'), 'string2string');
print_r($string);
$string = str_replace(array('1', '2', '3'), array('A', 'B', 'C'), 'string3string');
print_r($string);

check output here

答案 1 :(得分:0)

您可以使用preg_replace_callback()代替它在正则表达式匹配中具有回调功能。在回调函数中,匹配项存储在数组名称$matches中。

Alos ["A", "B", "C"][$matches[2]-1]1|2|3转换为A|B|C

$newString = preg_replace_callback("/(.*)(1|2|3)(.*)/", function($matches){
    return $matches[1].["A", "B", "C"][$matches[2]-1].$matches[3];
}, $string);

demo中查看结果