首页 > 解决方案 > 正则表达式匹配所有引号,但当行以斜杠开头时不匹配

问题描述

使用 preg_replace() 在 PHP 中进行正则表达式。
匹配所有引号,但不匹配以斜杠开头的行

源代码:

// eehen nhdhdhd ooe "jjejej" ejeje "keihjen" jehhemm
jejej "jejeooe" kekek "jilnana" jennbeb

需要的结果:

// eehen nhdhdhd ooe "jjejej" ejeje "keihjen" jehhemm
jejej <span class="red">"jejeooe"</span> kekek <span class="red">"jilnana"</span> jennbeb

我的正则表达式只匹配最后一个引号。我将用外部跨度替换所有引号,包括引号,但不是所有引号都在注释行中。

我的正则表达式:

'/^((?!\/\/).*)(".*")/m'

我的替换:

'$1<span class="red">$2</span>'

我的结果:

// eehen nhdhdhd ooe "jjejej" ejeje "keihjen" jehhemm
jejej "jejeooe" kekek <span class="red">"jilnana"</span> jennbeb

标签: phpregexpreg-replace

解决方案


您的锚点使您的搜索从字符串的开头开始,然后继续。//我会使用 PCRE 动词跳过任何以 s 开头的行。

^\/\/.*(*SKIP)(*FAIL)|("[^"]+")

那么你可以替换为

<span class="red">$1</span>

https://regex101.com/r/bLkctu/1/

对于实体化值:

^\/\/.*(*SKIP)(*FAIL)|(&quot;.*?&quot;)

https://regex101.com/r/bLkctu/2/


推荐阅读