正则表达式:如何匹配以括号“)”结尾的单词

Posted

技术标签:

【中文标题】正则表达式:如何匹配以括号“)”结尾的单词【英文标题】: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 【参考方案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)

【讨论】:

以上是关于正则表达式:如何匹配以括号“)”结尾的单词的主要内容,如果未能解决你的问题,请参考以下文章

用于匹配单词的正则表达式,除非前一行以单词结尾

C ++ 11正则表达式匹配一个不以句点结尾的完整单词?

正则表达式经验汇总

php正则表达式

42 python中正则中的分组 正则中匹配字符串的起始和结尾以及单词边界

正则表达式:匹配以“AM”结尾的单词(不区分大小写比较)[重复]