PHP字符串搜索和替换用文本编写的数字的通配符

时间:2013-12-11 22:35:23

标签: 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='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';

其中 ??? 是" 20"之间的一些通配符代码。和#34;一个"这将使其适用于以下所有搜索案例。

搜索:

$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';

提前致谢。

3 个答案:

答案 0 :(得分:1)

$n_0 = '/twenty[-\s,:_()*]*one/';
...
preg_replace($search, $replace, $string);

答案 1 :(得分:0)

试试这个:

$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;

答案 2 :(得分:0)

以下正则表达式将执行:

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

它的作用是:

  • 搜索字符串containsint“twenty”
  • 后跟任何 - :_ *(或)OR后跟可选的逗号后跟可选空格
  • 后跟“one”