PHP字符串搜索和替换以文本形式写入的数字的通配符

PHP字符串搜索和替换以文本形式写入的数字的通配符,php,regex,search,replace,Php,Regex,Search,Replace,我四处搜索,找不到这个具体案例的简单解决方案。我不是PHP专业人士,还在学习 我正在执行字符串搜索和替换以文本形式写入的数字,以将它们转换回数字。下面是一个小例子: $n_0='twenty one'; $n_1='twenty two'; $n_2='twenty three'; $n_3='twenty four'; $n_4='twenty five'; $n_5='twenty six'; $n_6='twenty seven'; $n_7='twenty eight'; $n_8='t

我四处搜索,找不到这个具体案例的简单解决方案。我不是PHP专业人士,还在学习

我正在执行字符串搜索和替换以文本形式写入的数字,以将它们转换回数字。下面是一个小例子:

$n_0='twenty one'; $n_1='twenty two'; $n_2='twenty three'; $n_3='twenty four'; $n_4='twenty five'; $n_5='twenty six'; $n_6='twenty seven'; $n_7='twenty eight'; $n_8='twenty nine'; $n_9='thirty one';

$r_0='21'; $r_1='22'; $r_2='23'; $r_3='24'; $r_4='25'; $r_5='26'; $r_6='27'; $r_7='28'; $r_8='29'; $r_9='31';

$search = array($n_0, $n_1, $n_2, $n_3, $n_4, $n_5, $n_6, $n_7, $n_8, $n_9, $n_10, $n_11, $n_12, $n_13, $n_14, $n_15, $n_16, $n_17, $n_18, $n_19, $n_20, $n_21, $n_22);

$replace = array($r_0, $r_1, $r_2, $r_3, $r_4, $r_5, $r_6, $r_7, $r_8, $r_9, $r_10, $r_11, $r_12, $r_13, $r_14, $r_15, $r_16, $r_17, $r_18, $r_19, $r_20, $r_21, $r_22);

$string = str_ireplace($search, $replace, $string);
有没有一种方法可以定义一个“单个”PHP变量,以便找到所有给定的条件

例如:

Search for: $n_0='twenty???one';
Replace with: $r_0 = '21';
$n_0='twenty one';
$n_0='twenty, one';
$n_0='twenty,one';
$n_0='twenty-one';
$n_0='twenty:one';
$n_0='twenty_one';
$n_0='twenty*one';
$n_0='twenty(one';
$n_0='twenty)one';
$n_0='twentyone';
其中,是介于“二十”和“一”之间的通配符代码,可用于以下所有案例搜索

搜索:

Search for: $n_0='twenty???one';
Replace with: $r_0 = '21';
$n_0='twenty one';
$n_0='twenty, one';
$n_0='twenty,one';
$n_0='twenty-one';
$n_0='twenty:one';
$n_0='twenty_one';
$n_0='twenty*one';
$n_0='twenty(one';
$n_0='twenty)one';
$n_0='twentyone';
提前感谢。

试试这个:

$pattern = array('/twenty[^a-zA-Z]*?one/','/twenty[^a-zA-Z]*?two/');
$replace = array('21','22');
$result = preg_replace($pattern, $replace, "I love twentyone but really love twenty238two");

echo $result;

以下正则表达式将执行以下操作:

preg_replace('/twenty(?:[-:_\*\(\)]|,? ?)one/', '21', $n_0);
它所做的是:

  • 搜索包含int“二十”的字符串
  • 后跟任何-:*(或)或后跟可选逗号,后跟可选空格
  • 然后是“一”

使用
preg\u replace
而不是
str\u ireplace
,并使用带有通配符的正则表达式。@Barmar如何实现?示例会有所帮助。它似乎是一个非常简单的正则表达式,但我还是发布了一个答案。请使用字符串
我爱二十而不是两个
@Tom Pace是否有通配符来替换???单位:n_0='20???1美元。我有100多个文本编号组合要替换。我只需要在单词之间替换一个字符。我建议。*?它懒洋洋地捕捉20到1之间的任何东西。但正如巴尔马所说,它将用“我爱22”取代“我爱20,但不是2”之类的词?到[^a-zA-Z]*?。它涵盖了Barmar的观点。@Sammy这个正则表达式是一个包罗万象的正则表达式,它将涵盖您的示例中未涉及的其他内容。比如“二十一”和“二十一”。。。我不知道这对你是否重要。