我需要一个正则字符串模式,该字符串s*
将成功,但字符串.*
不会成功。我发现这很棘手。我希望[^.]\\*
或[^\\.]\\*
或(?<!\\.)\\*
能够正常运作,但这些都不会。
有什么想法吗?
@Test
public void testTemp() {
String regex = "[^.][*]";
if ("s*".matches(regex)) {
if (".*".matches(regex)) {
System.out.println("Success");
} else {
// This exception gets thrown.
throw new RuntimeException("Wrongly matches dot star");
}
} else {
throw new RuntimeException("Does not match star");
}
}
请不要告诉我我的用例是愚蠢的。我有一个完全合法的用例,有点难以清晰表达。我只想说,我并不困惑。
答案 0 :(得分:3)
您的代码的问题是它也匹配非点字符。您应该使用negative lookbehind代替:
(?<![.])[*]
Pattern regex = Pattern.compile("(?<![.])[*]");
if (regex.matcher("s*").find()) {
if (!regex.matcher(".*").find()) {
System.out.println("Success");
} else {
// This exception gets thrown.
throw new RuntimeException("Wrongly matches dot star");
}
} else {
throw new RuntimeException("Does not match star");
}
答案 1 :(得分:2)
您的意思是if (! ".*".matches(regex)) {
答案 2 :(得分:2)
模式是正确的,只是你的第二个if
声明错了尝试这个
@Test
public void testTemp() {
String regex = "[^.][*]";
if ("s*".matches(regex)) {
if (!".*".matches(regex)) {
System.out.println("Success");
} else {
// This exception gets thrown.
throw new RuntimeException("Wrongly matches dot star");
}
} else {
throw new RuntimeException("Does not match star");
}
}