【问题标题】:Regex match only full word, but not if wrapped in quotes正则表达式仅匹配完整单词,但如果包含在引号中则不匹配
【发布时间】:2015-12-21 20:13:07
【问题描述】:

我只想匹配完整的单词,但如果用引号括起来则不匹配

例如:word

但不是:"word"

第一个可以匹配/\bword\b/

第二个这是我得到的最接近的,问题是它阻止了匹配 "wordword""word",我只希望它不匹配,如果它是"word"

(?!")\bword\b(?!")

【问题讨论】:

  • 一种稍微不同的方法是将单词与任一侧的任意字符匹配,然后检查代码中的引号。这样做的好处是,当您不是在阅读一个非常聪明但难以理解的正则表达式时,您会在六个月后记住它的作用。

标签: php regex


【解决方案1】:
\b(\w+(?!")|(?<!")\w+)\b

See it in action

这个想法是如果单词后面没有或前面没有"(使用negative lookarounds),而不是同时匹配两者。

【讨论】:

  • 解释可能有帮助
  • 这很聪明,很好。
【解决方案2】:

你可以在 PHP 中使用这个正则表达式:

"\w+"(*SKIP)(*F)|\b\w+\b

这将在每个 "word" 使用 (*SKIP)(*F) 指令时失败,否则将匹配每个单词。

RegEx Demo

【讨论】:

  • 这更容易理解。
【解决方案3】:

试试

/((\")*word$)|(^word(\")*)/g

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2016-01-14
    • 2017-04-01
    相关资源
    最近更新 更多