Java正则表达式表现异常

时间:2018-11-15 06:01:34

标签: java regex

我有以下测试用例

    @Test
    public void test_check_pattern_match_caseInSensitive_for_pre_sampling_filename() {
        // given
        String pattern = "Sample*.*Selection*.*Preliminary";

        // when

        // then
        assertThat(Util.checkPatternMatchCaseInSensitive(pattern, "Sample selectiossn preliminary"), is(false));
        assertThat(Util.checkPatternMatchCaseInSensitive(pattern, "sample selection preliminary"), is(true));
    }

Util方法是:

public static boolean checkPatternMatchCaseInSensitive(String pattern, String value) {

        Pattern p = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);
        Matcher matcher = p.matcher(value);
        if (matcher.find())
            return true;

        return false;
    }

有人可以帮忙,为什么正则表达式Sample*.*Selection*.*Preliminary与fileName = Sample selectiossn preliminary匹配?

该测试用例应该通过,但是由于第一个断言而失败。 :S

3 个答案:

答案 0 :(得分:2)

正则表达式中的*表示前一个字符的0个或多个,而.表示任何单个字符。

您要寻找的表情是:

  
      
  1. 恰好Sampl
  2.   
  3. 0个或更多e
  4.   
  5. 0个或更多字符
  6.   
  7. 恰好Selectio
  8.   
  9. 0个或更多n
  10.   
  11. 0个或多个字符   等等
  12.   

问题将属于第5点和第6点:

在第5点下没有找到n,并且ssn将与第6点匹配

答案 1 :(得分:0)

    regexp中的
  • Selection*"selectio"匹配。
  • .*"ssn "匹配
  • Preliminary"preliminary"匹配

正则表达式n*表示零个或多个n字符。

正则表达式.表示任何字符。

Regexp .*表示零个或多个任何字符。

答案 2 :(得分:0)

*.*

您有"Selection*.*",表示"Selectio",然后是字母"n"的任何数字(包括零),然后是任何字符的任何数字(包括零)。

该匹配假定"n"匹配""的零匹配,以及任何匹配"ssn "的字符的四匹配。