我在文件
中有以下内容/**
some text
text1
text2
some text
**/
我想检查" text1"或" text2"如上例所示,它包含在/ ** ** /之间。
我试过下面的代码
Pattern p = Pattern.compile("//*/*.*?text1.*?/*/*/");
Matcher m = p.matcher(fileAsString);
while (m.find()) {
System.out.println("match found");
}
但它有两个缺点。这些是: -
1)它检查/ ** text1 ** /之间的text1但是当text1在下一行时不起作用
2)我不知道如何检查两个字符串中的任何一个,即" text1"或" text2"在这个正则表达式?
答案 0 :(得分:2)
您可以使用:
Pattern p = Pattern.compile("/\\*\\*.*?(?:text1|text2).*?\\*\\*/", Pattern.DOTALL);
Pattern.DOTALL
需要确保匹配跨越多行的文字*
需要使用\\*
(?:text1|text2)
是非捕捉变更,需要匹配text1
或text2
。答案 1 :(得分:0)
以下模式可确保您在找到text1
或text2
时始终位于评论部分内。为此,我重复了一个与评论结束**/
无法匹配的群组:(?>[^*]|\\*(?!\\*/))*
Pattern p = Pattern.compile("\\Q/**\\E"
+ "(?>[^*]|\\*(?!\\*/))*?"
+ "(?:text1|text2)"
+ "(?>[^*]|\\*(?!\\*/))*"
+ "\\Q**/\\E");
答案 2 :(得分:-1)