正则表达式否定运算符在java版本中的工作方式不同

正则表达式否定运算符在java版本中的工作方式不同,java,regex,regex-negation,Java,Regex,Regex Negation,在从java 8到java 11的代码迁移过程中,我遇到了一个带有回车符的正则表达式否定运算符问题。 简化的问题:有一个标记正则表达式模式: Pattern regex = Pattern.compile("<(\\w+)>([^<]*?)</\\1>", Pattern.CANON_EQ); // pattern for "<tag>...</tag>" Matcher regexMatcher =

在从java 8到java 11的代码迁移过程中,我遇到了一个带有回车符的正则表达式否定运算符问题。
简化的问题:有一个标记正则表达式模式:

Pattern regex = Pattern.compile("<(\\w+)>([^<]*?)</\\1>", Pattern.CANON_EQ);  // pattern for "<tag>...</tag>"
Matcher regexMatcher = regex.matcher("<a>bla\\r\\nbla</a>");
if (regexMatcher.find()) {
...
}

Pattern regex=Pattern.compile(“([^在Java 14中起作用……在Java 11上对我也起作用,如果你使用
Pattern.DOTALL
,但仍然使用负字符类怎么办?@AlexanderMashin
DOTALL
不会改变任何东西,因为没有
(点)在正则表达式中。@Andreas,它可能是由一个负字符类暗示的。但是在Java 14中工作……它在Java 11上也对我工作。如果你使用
模式。DOTALL
但仍然使用负字符类呢?@AlexanderMashin
DOTALL
不会改变任何东西,因为没有
(点)在正则表达式中,@Andreas,它可能由一个负字符类暗示。
"<(\\w+)>(.*?)</\\1>" with Pattern.DOTALL