我正在尝试替换一个或多个反斜杠后跟一个引号。例如,如何将\\'
的所有实例替换为'
,将\\\\'
替换为'
。
示例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 );
?>
答案 0 :(得分:5)
您的问题已经改变。
如果你想更换一个或多个&#34;反斜杠,只需使用
"/\\\\+'/"
同样,\
转义一次,因为字符串变为\\
,并且再次转义为正则表达式变为\\\\
。
您最初的问题是如何替换成反斜杠:
你想要一个简单的正则表达式:
preg_replace("/(\\\\\\\\)+'/","'", $subject);
是的,所有这些\
都是匹配一对文字反斜杠所必需的。
您可以从/\\'/
开始 - 两个反斜杠后跟一个'
。首先,因为PHP中的正则表达式是字符串,所以你需要转义两个反斜杠才能生成两个文字反斜杠:
"/\\\\'/"
接下来,您实际上正在生成正确的字符串(/\\'/
)但是,现在您只是在正则表达式级别转义单个\
,所以正则表达式引擎仍然将其解析为\'
。要允许一对反斜杠实际存在于最终的正则表达式中,你必须再次使用>退出那些四个反斜杠,产生
"/\\\\\\\\'/"
接下来,你应该在()
中包含反斜杠并添加一个量词,这样你就可以匹配一组或多组\\
......
"/(\\\\\\\\)+'/"
后跟'
。
这正确匹配偶数数量的黑色斜杠后跟'
。这适用于can\\'t
和can\\\\'t
,但不适用于can\'t
或can\\\'t
等。