查找\"
我认为就是这样:'/\\"/'
但是我需要在一个非常大的数据集上使用它,所以需要确保这是正确的。
我需要将其替换为"
,因此我的代码为:$data = preg_replace('/\\"/', '"', $data)
这是对的吗?
答案 0 :(得分:5)
要匹配反斜杠,您需要“双重转义”它们,所以最后有四个\
:
$data = preg_replace('/\\\\"/', '"', $data);
为什么需要4 \
:PHP将字符串\\"
解析为\"
,RegEx将其解释为"
,因为在RegEx中您不需要转义"
1}}。所以它不匹配\"
。 \\\\"
将被解析为\\"
,由RegEx解释为\"
。
答案 1 :(得分:5)
反斜杠不需要在单引号字符串或正则表达式中进行转义,除非以下字符是可以转义的字符(例如反斜杠本身)。
双引号不需要转义,也不能在单引号字符串中转义。在正则表达式中,它不必是,但它可以。
这意味着单引号字符串和正则表达式中的\\
变为\
,而单引号字符串中的\"
仍为\"
,而在正则表达式变为"
。
但是,在PHP中,您只能从字符串创建正则表达式,因此必须转义两次。
换句话说......
Original string String processed Regexp processed
'/\"/' /\"/ "
'/\\"/' /\"/ "
'/\\\"/' /\\"/ \"
'/\\\\"/' /\\"/ \"
'/\\\\\"/' /\\\"/ \"
'/\\\\\\"/' /\\\"/ \"
'/\\\\\\\"/' /\\\\"/ \\"
当然,在双引号字符串中,"
确实需要转义,所以......
"/\"/" /"/ "
"/\\"/" syntax error
"/\\\"/" /\"/ "
"/\\\\"/" syntax error
"/\\\\\"/" /\\"/ \"
"/\\\\\\"/" syntax error
"/\\\\\\\"/" /\\\"/ \"
"/\\\\\\\\"/" syntax error
"/\\\\\\\\\"/" /\\\\"/ \\"
我认为你应该选择preg_replace("/\\\\\\\"/", "\"", $data)
只是为了安全混淆。
答案 2 :(得分:4)
只要您指的是文字字符串\"
,匹配正则表达式中的这些字符就需要:
\\"
因此,您在preg_ *函数中使用/\\\\"/
作为模式参数。
(你只需要逃避反斜杠 - 从PHP handles backslashes in single and double-quotes strings as a special character开始,你需要逃避它们两次。)
这个所有你需要匹配吗?如果是这样,我建议您只使用str_replace():
$string = str_replace('\\"', '"', $string);
对于像这样的文字字符的简单搜索/替换,像str_replace()
这样的迭代字符串函数将比正则表达式更快。</ p>
答案 3 :(得分:2)
答案 4 :(得分:1)
在PHP中,反斜杠具有特殊含义。因此,您可以将文字反斜杠表示为以下任一项:\\\
或\\\\
。另一种方法是使用字符类:[\\]
。
请参阅此处标有“注意”的部分:
答案 5 :(得分:0)
这对你的数据不一样吗?
str_replace('\\"','"',$data);
答案 6 :(得分:0)
$result = preg_replace('/\\\\"/i', '"', $subject);