Java模式包含数组中的所有字符串

时间:2015-01-16 22:41:30

标签: java regex matcher

我想检查一个包含多个字符串的长字符串。

我正在尝试使用以下命令。

          String[] words = {"GAGGAG", "AGGAC"};
          Pattern pattern = Pattern.compile("GAGGAG|AGGAC");
          if(pattern.matcher("GAGGAGGTC").find()){
                 System.out.println("find");
          }else{
                 System.out.println("Not find");
          }

结果应该是找不到的 因为“GAGGAGGTC”包含“GAGGAG”但不包含“AGGAC”

如何从“或”选择“和”

还有一个选择。

          String[] words = {"GAGGAG", "AGGAC"};
          Pattern pattern = Pattern.compile("GAGGAG|AGGAC");
          if(pattern.matcher("GAGGAGGAC").find()){
                 System.out.println("find");
          }else{
                 System.out.println("Not find");
          }        

这也应该显示“Not find”。 因为不允许重叠部分。 “GAGGAG”和“AGGAC”与“GAGGAGGAAC”重叠“AG”部分

3 个答案:

答案 0 :(得分:2)

您必须使用下面的alternation运算符|

Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG");

<强>解释

  • GAGGAG.*AGGAC匹配GAGGAG加上.*中间任何字符,且必须有AGGAC子字符串。

  • | OR运算符,以便匹配任何订单。

  • AGGAC匹配AGGAC,.*零个或多个字符加GAGGAG字符串。

示例1:

  Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG");
  if(pattern.matcher("GAGGAGGAC").find()){
         System.out.println("find");
  }else{
         System.out.println("Not find");
  }   // Output: Not find

示例2:

Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG");
  if(pattern.matcher("GAGGAGAGGAC").find()){
         System.out.println("find");
  }else{
         System.out.println("Not find");
  }   
}    // Output: find

示例3:

Pattern pattern = Pattern.compile("GAGGAG.*AGGAC|AGGAC.*GAGGAG");
  if(pattern.matcher("AGGACFOOGAGGAG").find()){
         System.out.println("find");
  }else{
         System.out.println("Not find");
  }  // Output: find

答案 1 :(得分:1)

您不需要为此目的使用正则表达式。

使用String#contains

public boolean checkContainsAll(String sentence, String[] words) {
    for(String word : words) {
        if(!sentence.contains(word)) {
            return false;
        }
    }
    return true;
}

在你的例子中:

String[] words = {"GAGGAG", "AGGAC"};
String sentence = "GAGGAGGTC";
if(checkContainsAll(sentence, words)) {
    System.out.println("The sentence " + sentence + " contains all words");
} else {
    System.out.println("The sentence " + sentence +" does not contain all words.");
}

DEMO


更新

要检查没有重叠,我的示例中最简单的解决方案是删除在给定句子中找到的单词,以便下次检查时不会出现这些单词:

public boolean checkContainsAll(String sentence, String[] words) {
    for(String word : words) {
        if(!sentence.contains(word)) {
            return false;
        }
        sentence = sentence.replace(word, "");
    }
    return true;
}

DEMO

答案 2 :(得分:0)

将正则表达式更改为&#34;和&#34;操作

(?=GAGGAG)(?=AGGAC)