積極向前看,我試圖建立一個Java正則表達式匹配「.jar!
」的感嘆號
美中不足的是,我不希望匹配消耗感嘆號。我嘗試使用Pattern.compile("\\.jar(?=!)")
但失敗。正如逃避感嘆號一樣。
任何人都可以得到這個工作,或者這是一個JDK的bug?
UPDATE:我覺得自己像個白癡,Pattern.compile("\\.jar(?=!)")
確實有效。我使用Matcher.matches()而不是Matcher.find()。
積極向前看,我試圖建立一個Java正則表達式匹配「.jar!
」的感嘆號
美中不足的是,我不希望匹配消耗感嘆號。我嘗試使用Pattern.compile("\\.jar(?=!)")
但失敗。正如逃避感嘆號一樣。
任何人都可以得到這個工作,或者這是一個JDK的bug?
UPDATE:我覺得自己像個白癡,Pattern.compile("\\.jar(?=!)")
確實有效。我使用Matcher.matches()而不是Matcher.find()。
使用正則表達式的工作對我來說(使用Sun JDK 1.6.0_02對於Linux):
import java.util.regex.*;
public class Regex {
private static final String text = ".jar!";
private static final String regex = "\\.jar(?=!)";
public static void main(String[] args) {
Pattern pat = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pat.matcher(text);
if (matcher.find()) {
System.out.println("Match: " + matcher.group());
} else {
System.out.println("No match.");
}
}
}
打印:
Match: .jar
(不!)
此外,您可以嘗試拳擊它
Pattern.compile("\\.jar(?=[!])")
的Java必須打破:Perl的
use strict;
use warnings;
my @data = qw(.jar .jar! .jarx .jarx!);
my @patterns = (
"\\.jar(?=!)",
"\\.jar(?=\\!)",
"\\.jar(?=[!])",
);
for my $pat (@patterns){
for my $inp (@data) {
if ($inp =~ /$pat/) {
print "$inp =~ $pat \n";
}
}
}
- >
.jar! =~ \.jar(?=!)
.jar! =~ \.jar(?=\!)
.jar! =~ \.jar(?=[!])
不要刪除,這仍然是向可能犯同樣錯誤的其他人提供信息。 – 2008-11-15 21:58:14
http://www.oleswanson.com/images/office/mistakes.jpg :) – 2008-11-15 21:59:31
夠公平的,我現在就把它留下:) – Gili 2008-11-15 22:18:58