使用preg_replace函数将('a - b')转换为('a - c')

时间:2012-10-21 22:19:01

标签: php

我有一个问题,我尝试解决它,但我无法解决它,因为我不熟悉正则表达式,所以我想做的是将'A - B'转换为'A - C'使用preg_replace函数。

例如:

'Mon ~ Tue' => 'Mon ~ Wed'

如何使用preg_replace解决此问题?

3 个答案:

答案 0 :(得分:1)

这不需要正则表达式。

str_replace('Mon ~ Tue', 'Tue', 'Wed');

似乎工作正常。

除非我在这里遗漏了什么?

答案 1 :(得分:1)

下面的代码似乎可以完成这项工作,但很难猜到你到底想要做什么。

$x = "Mon ~ Tue"; preg_replace("/(Mon ~ )Tue/", "\$1Wed", $x);

答案 2 :(得分:1)

使用str_replace可以对字符串进行基本替换,您根本不需要正则表达式:

$string = str_replace('Tue', 'Wed', $string);

如果您有一系列字符串,例如

$weekdays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

要使用以下内容替换每一天,我们可以先生成“旋转”数组

$week_one = $weekdays;
$week_one[] = array_shift($week_one);

但是由于str_replace的工作方式,我们不能使用str_replace($ weekdays,$ week_one,$ string)(它会用星期二代替Mon,然后那个< / em> Tue with Wed,然后 周三与Thu ...我们将以'Mon'结束。

所以我们必须分两步完成。在第一步中,我们用字符串替换所有字符串,这些字符串肯定不在源集中,也不在目标字符串中。例如,我们用{$weekdays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'); $replace = array(); foreach($weekdays as $i => $day) $replace[] = '{{{'.$i.'}}}'; $string = str_replace($weekdays, $replace, $string); // Then we rotate $replace in the opposite direction. array_unshift($replace, array_pop($replace)); // And we reverse the replace. $string = str_replace($replace, $weekdays, $string); }替换Mon。在第二步中,我们用Tue替换{{{1}}}。

{{1}}

您可以使用类似的方法在下一个工作日中仅替换字符串中工作日的第二次出现。