首页 > 解决方案 > 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;

我想知道整个文本匹配的正确正则表达式。

标签: javaregex

解决方案


因为您试图忽略换行符并将其定义;为自定义行终止符,所以最好使用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

推荐阅读