否定Java正则表达式中的文字字符串
问题描述:
因此,正则表达式似乎匹配最长可能的匹配项。例如:否定Java正则表达式中的文字字符串
public static void main(String[] args) {
String s = "ClarkRalphKentGuyGreenGardnerClarkSupermanKent";
Pattern p = Pattern.compile("Clark.*Kent", Pattern.CASE_INSENSITIVE);
Matcher myMatcher = p.matcher(s);
int i = 1;
while (myMatcher.find()) {
System.out.println(i++ + ". " + myMatcher.group());
}
}
产生输出
- ClarkRalphKentGuyGreenGardnerClarkSupermanKent
我想这个输出
- ClarkRalphKent
- ClarkSupermanKent
我一直在努力模式,如:
Pattern p = Pattern.compile("Clark[^((Kent)*)]Kent", Pattern.CASE_INSENSITIVE);
不工作,但你明白我想说什么。我想要从克拉克到肯特的字符串,不包含任何肯特事件。
此字符串:
ClarkRalphKentGuyGreenGardnerBruceBatmanKent
应该产生输出
- ClarkRalphKent
答
贪婪VS舍不得这里是你的朋友。
尝试:Clark.+?Kent
答
你想要一个 “不情愿”,而不是 “贪婪” 的量词。简单地把一个?你的*后应该做的伎俩。
答
当您尝试使用"Clark[^((Kent)*)]Kent"
时,我认为您希望"Clark((?!Kent).)*Kent"
为zero-width negative look-ahead(向下滚动一下“Look-Around Assertions”标题)。
括号指定字符匹配与模式匹配。因此,RegExp试图找到不在(, K, e, n, t,), *
中的单个字符。
请参阅http://perldoc.perl.org/perlre.html – 2008-12-09 21:28:41