正则表达式:如何搜索不包含 2 个连续下划线的标识符 \w

Regex: How to search for identifiers \w that do not contain 2 consecutive underscores

我尝试 "[A-Z][A-Z0-9_]*(_[A-Z0-9]+)+" 以查找由“_”链接的 alnum 组件组成的标识符,以字母开头且不包含小写字母,例如"ID_RED"、"NO_ENTRY_PERMITTED"、"THIS_IS4YOU_ALL"。我不想赶上 "THINKING__NO" 或 "4YOU_AND_ME".

错误好像在第二部分"(_[A-Z0-9]+)+";它至少不像预期的那样贪婪,但会产生 _RED, _ENTRY, _IS4YOU

问题在于 [A-Z0-9_]* 部分可以匹配 0 个或多个连续的 _ 个字符。你的模式无论如何都没有锚定,所以它也可以找到较长单词的部分匹配。

您可以使用

\b[A-Z][A-Z0-9]*(?:_[A-Z0-9]+)+\b

regex demo

详情:

  • \b - 单词边界
  • [A-Z] - 大写字母
  • [A-Z0-9]* - 0+个大写字母或数字
  • (?:_[A-Z0-9]+)+ - _ 出现 1 次或多次,然后是 1+ 个大写字母或数字
  • \b - 单词边界