php正则表达式匹配一个前面没有特定字符的字符

时间:2017-10-26 13:43:43

标签: php regex

我有一个字符串,其中有双引号的部分。我试图用单引号替换所有双引号,除了那些具有转义的部分,即:\"

我正在尝试构建一个匹配所有"的正则表达式,除了\"

之外的正则表达式

因此,当我使用preg_replace时,我会得到以下结论。

"love" -> 'love'

"John said \"HI\"" - > 'John said \"HI\"' 

我尝试过以下完全正好相反的事情。

[<^\\]"

1 个答案:

答案 0 :(得分:2)

你可以使用neg。回顾后:

(?<!\\)"

a demo on regex101.com

<小时/> 在PHP

<?php

$strings = ['"love"', '"John said \"HI\""'];

$regex = '~(?<!\\\\)"~';

foreach ($strings as $string) {
    echo preg_replace($regex, "'", $string) . "\n";
}

?>

这会产生

'love'
'John said \"HI\"'

请注意,在PHP中也需要对反斜杠进行转义,因此这里总共需要四个反斜杠。