【问题标题】:Regex to match strings inside brackets with no spaces around正则表达式匹配括号内的字符串,周围没有空格
【发布时间】:2017-09-17 10:12:31
【问题描述】:

我正在使用以下正则表达式来匹配括号内的字符串:

\((.*?)\)

但这符合这个:

(word)

还有这个:

( word )

我需要修改它以仅匹配第一种情况:括号内的单词,周围没有空格:(word)

有什么想法吗?

提前致谢

【问题讨论】:

  • (word1 word2)呢,这个应该匹配吗? ()怎么样,应该允许吗?
  • 是的(word1 word2)。不,只是()

标签: regex spaces brackets


【解决方案1】:

你可以使用这个模式:

\([^\s()](?:[^()]*[^\s()])?\)

[^\s()] 确保第一个字符不是空格或括号(并强制要求至少一个字符)。

(?: [^()]* [^\s()] )? 是可选的。如果匹配,相同的字符类确保最后一个字符不是空格。

【讨论】:

    【解决方案2】:

    使用lookahead/lookbehind 来禁止左括号后和右括号前的空格:

    \((?!\s)[^()]+(?<!\s)\)
    

    (?!\s)(?&lt;!\s) 的意思是“后面没有/前面没有空格”。

    中间的部分,[^()]+ 要求括号之间存在一个或多个字符,不允许 () 匹配。

    Demo.

    【讨论】:

    • 值得注意的是javascript不支持lookbehind。因此,取决于环境,这将或不会起作用。
    【解决方案3】:

    Word Boundaries

    \(\b[^)]+\b\)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 2023-03-29
      • 2017-06-28
      • 2023-04-02
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多