如何正则表达式匹配()在单词的末尾
Posted
技术标签:
【中文标题】如何正则表达式匹配()在单词的末尾【英文标题】:How to RegEx match ()'s at the end of a word 【发布时间】:2021-09-01 20:51:03 【问题描述】:我需要一个正则表达式 @""
来匹配单词末尾的两个括号 ()
。
试过\w*()\b
,但没用。
所以我需要匹配这样的内容:"Hello, world test(test) testing"
。
我只需要它来匹配那里的test(word)
。
【问题讨论】:
/[(].*[)]/g
使用这个。并查看regexr.com
【参考方案1】:
如果最后一个括号后有空格,则使用单词边界将无法匹配,因为)
和空格之间没有单词边界。
请注意,使用\w*
会选择性地重复单词字符,也可能只匹配()
你可能会使用:
\w+\((?:\w+(?:\s*,\s*\w+)*)?\)
\w+
匹配 1+ 个单词字符
\(
匹配(
(?:
非捕获组
\w+
匹配 1+ 个单词字符
(?:\s*,\s*\w+)*
可选择重复匹配 ,
和 1+ 个单词字符
)?
关闭组并使其成为可选
\)
匹配)
Regex demo
【讨论】:
@"\w+(\w*)(?!\S)" 根本不起作用,但 @"\w+(\w*)" 起作用,但我也希望空格起作用例如“你好(a)你好(a)”。而且我还需要它来检测更多参数,例如“test(a, b)”,因为这是用于 lua 的语法高亮显示。 gyazo.com/43521715663bfb24a3e668dd18b81e54 @IvanoVladimirSetiawan 喜欢这个? regex101.com/r/z2iGmj/1 是的,但由于某种原因,我的语法高亮器不起作用 现在 test(a, b) 可以工作了,但由于某种原因,空格仍然不起作用,我认为这是我写的颜色代码,但我不确定。 gyazo.com/dbac4542539f12eb731d631a79d1247b【参考方案2】:(
和 )
是用于分组的特殊字符。所以你必须对它们进行转义以匹配文字括号。您还需要在括号内添加一些内容以匹配那里的单词
\w*\(\w*\)\b
【讨论】:
如果我喜欢“testing(test)aaaa but not testing(test)aaaa”,它可以工作,因为某种原因,空格不允许正则表达式工作。我也希望它也能像“测试(a,b)”一样检测。这是 lua 的语法高亮。 @IvanoVladimirSetiawan 使用正则表达式进行语法高亮是一个坏主意。你需要一个真正的标记器来完成这项工作,否则它会在很多情况下失败 我有一个单独的 dll 上的正则表达式,所以它即使在十和千行上也不会滞后 它与滞后无关。谁说的?这是解析的正确性。使用正则表达式,在许多情况下可能会出现问题,例如 cmets 内的代码或许多其他极端情况【参考方案3】:/[^\s]+[(].*[)]/g
使用这个。并查看regexr.com
我添加这个表达式,你给字符串。我的表达式突出显示了你需要的字符串。
【讨论】:
以上是关于如何正则表达式匹配()在单词的末尾的主要内容,如果未能解决你的问题,请参考以下文章