我有以下测试用例
@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
答案 0 :(得分:2)
正则表达式中的*
表示前一个字符的0个或多个,而.
表示任何单个字符。
您要寻找的表情是:
- 恰好
Sampl
- 0个或更多
e
- 0个或更多字符
- 恰好
Selectio
- 0个或更多
n
- 0个或多个字符 等等
问题将属于第5点和第6点:
在第5点下没有找到n
,并且ssn
将与第6点匹配
答案 1 :(得分:0)
Selection*
与"selectio"
匹配。.*
与"ssn "
匹配Preliminary
与"preliminary"
匹配正则表达式n*
表示零个或多个n
字符。
正则表达式.
表示任何字符。
Regexp .*
表示零个或多个任何字符。
答案 2 :(得分:0)
*.*
您有"Selection*.*"
,表示"Selectio"
,然后是字母"n"
的任何数字(包括零),然后是任何字符的任何数字(包括零)。
该匹配假定"n"
匹配""
的零匹配,以及任何匹配"ssn "
的字符的四匹配。