PHP preg_replace \\'

时间:2015-02-04 21:20:22

标签: php regex

我正在尝试替换一个或多个反斜杠后跟一个引号。例如,如何将\\'的所有实例替换为',将\\\\'替换为'

示例IO:

It can\\\\\\\\\\\\\\'t hurt. => It can't hurt

It can\\'t hurt. => It can't hurt

It can\'t hurt. => It can't hurt 我试图以

开头的示例代码
<?php
$pattern = '/[/{2,}]/';
$replacement = '\'';
$subject = 'It can\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t hurt';
echo preg_replace($pattern, $replacement, $subject, -1 );
?>

1 个答案:

答案 0 :(得分:5)

您的问题已经改变。

如果你想更换一个或多个&#34;反斜杠,只需使用

"/\\\\+'/"

同样,\转义一次,因为字符串变为\\,并且再次转义为正则表达式变为\\\\


您最初的问题是如何替换成反斜杠:

你想要一个简单的正则表达式:

preg_replace("/(\\\\\\\\)+'/","'", $subject);

是的,所有这些\都是匹配一对文字反斜杠所必需的。

您可以从/\\'/开始 - 两个反斜杠后跟一个'。首先,因为PHP中的正则表达式是字符串,所以你需要转义两个反斜杠才能生成两个文字反斜杠:

"/\\\\'/"

接下来,您实际上正在生成正确的字符串(/\\'/但是,现在您只是在正则表达式级别转义单个\ ,所以正则表达式引擎仍然将其解析为\'。要允许一对反斜杠实际存在于最终的正则表达式中,你必须再次使用>退出那些四个反斜杠,产生

"/\\\\\\\\'/"

接下来,你应该在()中包含反斜杠并添加一个量词,这样你就可以匹配一组或多组\\ ......

"/(\\\\\\\\)+'/"

后跟'

这正确匹配偶数数量的黑色斜杠后跟'。这适用于can\\'tcan\\\\'t,但不适用于can\'tcan\\\'t等。