正则表达式处理零
我有*(星号)符号作为输入的字符串。 如果字符串有两个连续的星号,则认为该字符串无效。 但是,有一个逃逸符号(反斜杠)。
例如:
我一直在坚持这样的正则表达式产生不正确的结果:
/[^]**/
- java.util.regex.Pattern.compile("/[^\]**/")
/([^]*?**)|(**)/
- java.util.regex.Pattern.compile("/([^\]*?**)|(**)/")
。 此外,我从这里阅读了关于贪婪,不情愿和占有量的量化http://docs.oracle.com/javase/tutorial/essential/regex/quant.html
我知道这个问题是关于零长度匹配,但不能产生正确的正则表达式。
你正在寻找一个正则表达式,只会匹配无效的字符串? 这应该做到:
"(?<!\)**+"
它将连续匹配两个或多个星号,而不是前面加一个反斜杠。
编辑: (?<!foo)
thingy被称为“负面后顾”。 它匹配字符串中的任何零长度位置,该位置不是紧接在括号内匹配正则表达式的区域(本例中为“foo”,或者是您的反斜杠)。 起初,我把它当作[^\]
,除了它匹配任何字符(除了反斜杠外),而不是一个字符的缺少,就像在开始时一样“**”中的一个字符串。
对lookarounds(look-behind和look-ahead)以及许多其他正则表达式“magic”有很好的详细描述
使用string.matches方法。 这对有效的字符串返回true。
String s1 = "case**";
String s2 = "case**";
System.out.println(s1.matches("(?=.*(\**|*\*)).*"));
System.out.println(s2.matches("(?=.*(\**|*\*)).*"));
输出:
false
true
DEMO
链接地址: http://www.djcxy.com/p/76969.html上一篇: Regex handling zero