java - Java Regex - 匹配不以字符结尾的多行
问题描述
如果数据跨越多行,它将以“ ; ”结尾,但可能会有包含“ ; ”的注释文本。
This is test
b=4
/* a=b+c; */
b=5
c=7
/* a=b-c; */
a=b*c;
我试过这个正则表达式。
(This is test).+?;
它返回
This is test
b=4
/* a=b+c;
我想知道整个文本匹配的正确正则表达式。
解决方案
因为您试图忽略换行符并将其定义;
为自定义行终止符,所以最好使用String#split(String)
. 尝试以下模式:
\;(?!\s*\*\/)
如果我将它与您的字符串一起使用:
String str = "This is test"
+"\nb=4"
+"\n/* a=b+c; */"
+"\nb=5\nc=7"
+"\n/* a=b-c; */"
+"\na=b*c;";
for(String s : str.split("\\;(?!\\s*\\*\\/)")) {
System.out.println(s);
}
我得到以下输出:
This is test
b=4
/* a=b+c; */
b=5
c=7
/* a=b-c; */
a=b*c
推荐阅读
- function - 为什么 ocaml 忽略一个功能而其余的都做?
- sql - 有没有办法在sql中将varchar转换为int值?
- c - 如何在C中复制空字符串中的字符?
- docker - Newman report generation works locally but not from CI
- function - 具有多个 Foreach-Object 的函数
- rest - 用于获取存储库列表的 Azure REST API 返回 0 个存储库
- mysql - ORDER BY 子句中的布尔表达式
- git - 使用 fork-point 在 git 中进行修订选择
- javascript - 将 SVG 动画转换为图像序列
- reactjs - 使用 props 在 react 中传递身份验证令牌有哪些安全风险?