自从我使用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"
。
答案 0 :(得分:1)
这里有很多事情。
preg_replace不会更改字符串,但会返回一个值。所以你在寻找:
$ new_str = preg_replace(...
双重引用(单一内容)在Regex中不是元字符,所以你可以在“。”之前自由地离开\。它不会伤害任何东西,但它更具可读性,这与Regex很不错!
答案 1 :(得分:1)
您没有将值重新分配,并且需要在替换中将\1
更改为$1
。
$str = preg_replace('/(\d+)"/', "$1''", $str);
注意:您可以在引号前删除反斜杠,但这不是必需的。如果你的字符串总是这样,你可以使用str_replace()
单独替换引号:
$str = str_replace('"', "''", $str);