【问题标题】:How to use preg_replace for pattern that have or condition?如何将 preg_replace 用于具有或条件的模式?
【发布时间】:2018-09-12 11:01:44
【问题描述】:

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

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

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

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

所以我想用A,B,C 替换1,2,3 preg_replace() 函数。 请帮我这样做。

编辑:第一次尝试

我使用下面的代码来做到这一点

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

“string1string”的结果是:

string1string

我的目标是如果$21 则替换为A 或者如果2 替换为B3 替换为C

【问题讨论】:

  • 您自己有没有尝试过?与关于 SO 的大多数问题一样,如果您分享您的尝试,它可以帮助我们理解问题,并且您将从社区中得到更好的回应
  • 欢迎,为了改善您的 SO 体验,请阅读如何询问 On Topic questionQuestion Check listthe perfect question 以及如何创建 Minimal, Complete and Verifiable Exampletake the tour
  • "string110string" 的预期结果是什么?您是否打算匹配第一个、最后一个数字或任何数字块并以某种方式转换它们?请说明您想要实现的目标。
  • 请检查我的尝试

标签: php regex string preg-replace


【解决方案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

【讨论】:

  • 不,请检查我的尝试。
【解决方案2】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多