java - 正则表达式否定运算符在 java 版本中的工作方式不同
问题描述
我遇到了从 java 8 到 11 的回车 durnig 代码迁移的正则表达式否定运算符问题。
简单的问题:有一个标签正则表达式模式:
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()) {
...
}
它在 java 8 中工作。(它在输入中找到模式。)
在java 11中它没有。仅当我删除标志 Pattern.CANON_EQ,或将正则表达式修改为正模式时,例如:
"<(\\w+)>(.*?)</\\1>" with Pattern.DOTALL
关键部分是输入中的“\r”。它会导致问题:如果它不在输入中,它也适用于 java 11。
为什么?
解决方案
推荐阅读
- android - recyclerView.addOnScrollListener - “使用 MVVM 改造分页”正在加载相同的响应/列表
- flutter - Flutter:Image over Image,部分显示上部图像作为提供的值(例如1到10)
- c - 分段违规接线
- reactjs - 无法将输入数据从 react-autosuggest 传递到父文件
- windows - 使用绝对路径执行 sshd 时卡住
- python - 在 python 中使用 selenium 来捕获网络中的链接
- python - Pyinstaller 输出大文件。分发给其他人的最佳方式是什么?
- c - 如何在cmake中根据条件包含目录
- flutter - listview 不能在小部件作为其子项的情况下工作?
- python - Python:如何使用嵌套的 for 循环将值正确存储在数组中(三个循环,三维数组)?