正则表达式找到这种模式?

时间:2014-05-15 16:59:12

标签: java regex string

我在文件

中有以下内容
/** 
 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"在这个正则表达式?

3 个答案:

答案 0 :(得分:2)

您可以使用:

Pattern p = Pattern.compile("/\\*\\*.*?(?:text1|text2).*?\\*\\*/", Pattern.DOTALL);
  1. Pattern.DOTALL需要确保匹配跨越多行的文字
  2. *需要使用\\*
  3. 进行转义
  4. (?:text1|text2)是非捕捉变更,需要匹配text1text2

答案 1 :(得分:0)

以下模式可确保您在找到text1text2时始终位于评论部分内。为此,我重复了一个与评论结束**/无法匹配的群组:(?>[^*]|\\*(?!\\*/))*

Pattern p = Pattern.compile("\\Q/**\\E"
                          + "(?>[^*]|\\*(?!\\*/))*?"
                          + "(?:text1|text2)"
                          + "(?>[^*]|\\*(?!\\*/))*"
                          + "\\Q**/\\E");

答案 2 :(得分:-1)

你必须使用正则表达式吗? String.indexOf是一种可能的方法来判断文本是否被包含?您可以在/ * * /标记之间对内部字符串进行子字符串,然后执行indexOf