【问题标题】:regex : how to match word ending with parentheses ")"正则表达式:如何匹配以括号“)”结尾的单词
【发布时间】:2016-06-21 21:10:11
【问题描述】:

我想匹配以 ')' 结尾的字符串。 我使用模式:

 "[)]\b" or ".*[)]\b"

它应该匹配字符串:

x=main2.addMenu('Edit')

但它不起作用。怎么了?

【问题讨论】:

  • 您使用什么语言?为什么不直接使用\)\b
  • 在 JS 中,可能是这样的:(.*?\)$) - 捕获字符串末尾的所有内容,直到转义的 ')'。
  • ^.*?\)$ 我猜是你想要的
  • 感谢您的回复,“)”不起作用。我在这里试过:regex101.com

标签: regex match parentheses


【解决方案1】:

\b 只匹配单词边界的位置。将其视为(^\w|\w$|\W\w|\w\W),其中 \w 是任何字母数字字符,而 \W 是任何非字母数字字符。括号是非字母数字,因此不会被 \b 匹配。

只需匹配一个括号,然后使用\)$匹配字符串的结尾

【讨论】:

  • 谢谢,很好的解释。我使用这个网站:regex101.com。我试过那个'$'并且它有效。但是如果我有多行字符串,那么我将匹配最后一行。所以也许我必须先把多行分解成单独的行。或任何其他解决方案?
  • 如果你想编写一个匹配多行的正则表达式,那么你需要添加一个修饰符,这取决于你使用的语言。请参阅this 问题。
【解决方案2】:

如果您想捕获以) 结尾的字符串(而不仅仅是找到结尾的)),那么您可以在JS 中使用它:

(.*?\)$)

(....) - 捕获定义的内容;

.*? - 匹配任何直到下一个元素;

\)$ - 字符串末尾的)(需要转义);

Regex101

【讨论】:

    【解决方案3】:

    \b 单词边界不明确:在单词字符之后,它要求下一个字符必须是非单词 one 或字符串结尾。当它位于非单词字符(如))之后时,它需要紧跟其后出现一个单词字符(字母/数字/下划线)(这里不是字符串的结尾!)。

    所以,有三种解决方案:

    • 使用\B(非单词边界):.*[)]\B(请参阅demo)如果) 后跟单词字符,则不允许匹配
    • .*[)]$MULTILINE 模式一起使用(在模式的开头添加(?m) 或添加/m 修饰符,请参阅demo
    • 使用交替组模拟多行模式:.*[)](\r?\n|$)(请参阅demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2015-04-20
      • 2014-10-22
      相关资源
      最近更新 更多