正则表达式匹配所有[字符串字符串],除非两个单词都是完全上限

时间:2013-10-11 11:04:15

标签: regex

我正在寻找一个正则表达式,该正则表达式将匹配由[]封装的下划线分隔的2个字符串的组合。每个实例必须匹配,当两个字符串都是完全大写的单词时,exept。

我到现在所做的是:

\[(([A-z](?=[a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+_(([A-z](?![a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+\]

它应该匹配所有类似的情况:

[ONLYCAPS_ONLYCAPSTOO]

提前致谢!

忘记提及:字符串也可以包含特殊字符和空白字符。

3 个答案:

答案 0 :(得分:2)

你应该这样做

(?!\[[A-Z]+_[A-Z]+\])\[[^_]+_[^_]+\]
--------------------- --------------
         |                   |->desired result
         |
         |->won't match further if there's [ONLYCAPS_ONLYCAPSTOO] ahead

(?!pattern)是零宽度前瞻......即它只会检查但不匹配!

[^_]会匹配除_

之外的任何内容

答案 1 :(得分:2)

在这种情况下,您需要使用负面预测。正则表达式将起作用:

\[(?![A-Z]+_[A-Z]+\])[a-zA-Z]+_[a-zA-Z]+\]

分手:

\[           # Start with '['
   (?!         # See if not followed by
      [A-Z]+     # Upper case letters one or more times
       _         # An underscore
      [A-Z]+     # Upper case letters one or more times
      \]         # Till the ending ']'
   )           # Negative look-ahead ends
   # If negative look-ahead succeeds, perform actual match.
   [a-zA-Z]+   # Match upper or lowercase alphabets one or more times
    _          # An underscore
   [a-zA-Z]+   # Match upper or lowercase alphabets one or more times
\]           # Ending ']'

答案 2 :(得分:0)

你可以尝试使用负前瞻的正则表达式(如果你的正则表达式工具支持lookarounds):

(?!^\[[A-Z]+_[A-Z]+\]$)\[(([A-z](?=[a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+_(([A-z](?![a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+\]