PHP:preg_replace()“英寸”双引号与双单引号?

时间:2014-06-20 18:26:06

标签: php regex

自从我使用RegEx以来已经过了几年,即使在那个时候也是相当新手,我对我认为简单的事情感到难过。

我有两个数据源需要比较,一个是双引号"表示英寸而另一个使用双引号''
在我迭代的过程中,我需要将单双"转换为双单''

我开始玩preg_match(),一旦我有一个模式返回TRUE,我就把它移到了preg_replace()。但是,看起来我的微弱尝试并没有停滞不前 我们来看看:

$str = 'PRE-301 1/8" ID 48" BX';

preg_replace( '/(\d+)\"/', "\1''", $str );

echo '<pre>',var_dump($str),'</pre>';

我的目标是获得string(24) "PRE-301 1/8'' ID 48'' BX"。但是,我得到的只是原来的string(22) "PRE-301 1/8" ID 48" BX"

2 个答案:

答案 0 :(得分:1)

这里有很多事情。

  1. preg_replace不会更改字符串,但会返回一个值。所以你在寻找:

    $ new_str = preg_replace(...

  2. 双重引用(单一内容)在Regex中不是元字符,所以你可以在“。”之前自由地离开\。它不会伤害任何东西,但它更具可读性,这与Regex很不错!

答案 1 :(得分:1)

您没有将值重新分配,并且需要在替换中将\1更改为$1

$str = preg_replace('/(\d+)"/', "$1''", $str);

Live Demo

注意:您可以在引号前删除反斜杠,但这不是必需的。如果你的字符串总是这样,你可以使用str_replace()单独替换引号:

$str = str_replace('"', "''", $str);