正则表达式在捕获组中的负前瞻

时间:2018-12-07 04:14:54

标签: regex pcre

我正在尝试捕获一串大写字符,但要忽略大写字母后面是否有小写字母

例如 对于字符串ABC ABC ABC ABc,它应该捕获ABC ABC ABC只是因为最后一个AB之后有一个小写字母'c'

我尝试了([A-Z ]+)来捕获ABC ABC ABC AB

在这种情况下,如何添加否定前瞻?

https://regex101.com/r/j8Arzu/12

3 个答案:

答案 0 :(得分:2)

尝试将[A-Z]\b放在末尾,以确保匹配在单词右侧的单词边界处结束,也不要匹配不必要的空格。请注意,这里不需要捕获组,您可以将其完全排除。

[A-Z ]+[A-Z]\b

https://regex101.com/r/j8Arzu/13

如果大写字母子字符串可能以空格开头,则在字符串开头使用相同的技巧-以\b[A-Z]开头:

\b[A-Z][A-Z ]*[A-Z]\b

如果您另外 只匹配一个字符,则将第二个和第三个字符集[A-Z ]*[A-Z]放入可选组:

\b[A-Z](?:[A-Z ]*[A-Z])?\b

答案 1 :(得分:1)

使用单词边界\b避免匹配部分单词,并使用先行和否定后退来避免开头和结尾的空格。

(?! )\b[A-Z ]+\b(?<! )

https://regex101.com/r/Gf37Zk/1

答案 2 :(得分:1)

要仅捕获连续的大写字母,可以尝试以下正则表达式:/\b[A-Z]+\b/g

演示:https://regex101.com/r/W0VE7U/1