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

样本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 );
?>

最佳答案

您的问题已经改变。

如果要替换“一个或多个”反斜杠,请使用

"/\\\\+'/"


同样,当字符串变为\时,\\转义一次,对于正则表达式再次转义为\\\\



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

您需要一个简单的正则表达式:

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


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

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

"/\\\\'/"


接下来,您实际上是在生成正确的字符串(/\\'/),但是现在您只是在正则表达式级别转义了单个\,因此正则表达式引擎仍将其解析为\'。要在最终正则表达式中实际使用一对反斜杠,您必须再次转义这四个反斜杠,从而产生

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


接下来,应将反斜杠包裹在()中并添加一个量词,以便匹配一组或多组\\ ...

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


后跟一个'

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

关于php - PHP preg_replace\\',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28331692/

10-12 20:39
查看更多