所以这是我的正则表达式,用于匹配“ define”或“ define:”之后的单词
((?<=define |define: )\w+)
该部分一切正常。但是,当我添加该部分时,如果可以的话,它也应该与{}之间的单词匹配,它会匹配所有内容。
((?<=define |define: )\w+)|([^{][A-Z]+[^}])
我注意到的是,当我首先添加^ [{]时,它破坏了所有内容,我不明白为什么。
答案 0 :(得分:2)
为什么不能使用
[^{]
?
通过使用[^{]
,您的正则表达式将变为:
[^{][A-Z]+[^}]
换句话说,这翻译为:
{
的字符}
的字符请注意,您的正则表达式中没有任何内容可以使“一堆字母”部分必须位于{}
之间。它只是说它必须在非{
的字符之后,以及非}
的字符之前。按照这种逻辑,即使ABC
之类的东西也将匹配,因为A
不是{
,B
是一堆字母,而C
不是{{1 }}。
如何在
}
之间匹配单词?
您可以使用此正则表达式:
{}
并获得组1。
我不认为您应该将此与与{([A-Z]+)}
之后的单词匹配的正则表达式结合使用。您应该使用2个单独的正则表达式,因为这是两个完全不同的东西。
因此将其分成两个正则表达式:
define
和
(?<=define |define: )\w+
答案 1 :(得分:2)
您正在使用否定字符类,就像我们在正(?<=)
后面使用正向后看和(?=)
之前向后看一样。它们本质上是不同的,并且相对于向后看或向前看,字符类消耗字符。
因此:
[^{][A-Z]
匹配一个大写字母,该字母后跟{
以外的其他字符。 [A-Z][^}]
匹配一个大写字母,后跟}
以外的其他字符。 因此,如果您尝试将{OO}
中的字母与正则表达式[^{][A-Z]+[^}]
进行匹配,则正则表达式将不匹配任何内容,这是很正常的,因为您有两个字母,其中一个字母前面带有{{ 1}},另一个后跟{
。