我正在尝试构建一个 Java 正则表达式来匹配“ .jar!
”
问题是我不希望匹配器消耗感叹号。我尝试使用Pattern.compile("\\.jar(?=!)")
但失败了。就像逃避感叹号一样。
任何人都可以让它工作还是这是一个 JDK 错误?
更新:我觉得自己像个白痴,Pattern.compile("\\.jar(?=!)")
确实有效。我使用的是 Matcher.matches() 而不是 Matcher.find()。
我正在尝试构建一个 Java 正则表达式来匹配“ .jar!
”
问题是我不希望匹配器消耗感叹号。我尝试使用Pattern.compile("\\.jar(?=!)")
但失败了。就像逃避感叹号一样。
任何人都可以让它工作还是这是一个 JDK 错误?
更新:我觉得自己像个白痴,Pattern.compile("\\.jar(?=!)")
确实有效。我使用的是 Matcher.matches() 而不是 Matcher.find()。
使用您的正则表达式对我有用(使用 Sun JDK 1.6.0_02 for 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(?=[!])