我正在寻找一个正则表达式,该正则表达式将匹配由[]封装的下划线分隔的2个字符串的组合。每个实例必须匹配,当两个字符串都是完全大写的单词时,exept。
我到现在所做的是:
\[(([A-z](?=[a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+_(([A-z](?![a-z]+))(?!=[a-z]{0,}))[a-zA-Z]+\]
它应该匹配所有类似的情况:
[ONLYCAPS_ONLYCAPSTOO]
提前致谢!
忘记提及:字符串也可以包含特殊字符和空白字符。
答案 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]+\]