我将带有 *(星号)符号的字符串作为输入。如果字符串有两个连续的星号,则认为该字符串无效。但是,有一个转义符号\(反斜杠)。
例如:
- “**”(无效)
- “\**”(有效)
- “案例**”(无效)
- “案例\**”(有效)
- "*\*"(有效)
我一直卡在这种产生错误结果的正则表达式上:
/[^\\]\*\*/
-java.util.regex.Pattern.compile("/[^\\\\]\\*\\*/")
/([^\\]*?\*\*)|(\*\*)/
-java.util.regex.Pattern.compile("/([ ^\\\\]*?\\*\\*)|(\\*\\*)/")
。
另外,我从这里读到了贪婪的、不情愿的和占有欲的量化 http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
我知道问题是关于零长度匹配,但无法生成正确的正则表达式。
最佳答案
使用 string.matches 方法。这对有效字符串返回 true。
String s1 = "case**";
String s2 = "case\\**";
System.out.println(s1.matches("(?=.*(\\\\\\*\\*|\\*\\\\\\*)).*"));
System.out.println(s2.matches("(?=.*(\\\\\\*\\*|\\*\\\\\\*)).*"));
输出:
false
true
关于java - 正则表达式处理零长度匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153264/