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

问题描述 投票:0回答:1

我尝试"[A-Z][A-Z0-9_]*(_[A-Z0-9]+)+"来查找由'_'链式数字部分组成的标识符,标识符以字母开头,并且不包含小写字母,例如“ ID_RED”,“ NO_ENTRY_PERMITTED”,“ THIS_IS4YOU_ALL”。我不想听到“ THINKING__NO”或“ 4YOU_AND_ME”。

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

regex identifier
1个回答
0
投票

问题出在[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-单词边界
© www.soinside.com 2019 - 2024. All rights reserved.