PHP preg_replace \\'

get*_*ekv 2 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 );
?>
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 5

你的问题已经改变了.

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

"/\\\\+'/"
Run Code Online (Sandbox Code Playgroud)

再次,\当一个字符串变为逃脱一次\\,并再次逃脱为正则表达式成为\\\\.


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

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

preg_replace("/(\\\\\\\\)+'/","'", $subject);
Run Code Online (Sandbox Code Playgroud)

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

你可能会开始/\\'/- 两个反斜杠后跟一个'.首先,因为在PHP中的正则表达式是字符串,你需要的逃生反斜杠只生产两种文字反斜杠:

"/\\\\'/"
Run Code Online (Sandbox Code Playgroud)

接下来,你实际上正在生成正确的字符串(/\\'/)但是,现在你只是\在正则表达式级别转义一个,所以正则表达式引擎仍在解析它\'.为了让一对后的斜杠实际上是存在于最终的正则表达式,你必须逃离这四个反斜杠再次,产生

"/\\\\\\\\'/"
Run Code Online (Sandbox Code Playgroud)

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

"/(\\\\\\\\)+'/"
Run Code Online (Sandbox Code Playgroud)

接下来是一个'.

这正确匹配偶数个黑色斜杠后跟a '.这将为工作can\\'tcan\\\\'t,但没有can\'tcan\\\'t