感叹号的积极前瞻

时间:2008-11-15 21:26:02

标签: java regex regex-lookarounds

我正在尝试构建一个Java正则表达式来匹配“.jar!

问题是,我不希望匹配器使用感叹号。我尝试使用Pattern.compile("\\.jar(?=!)"),但失败了。就像逃避感叹号一样。

任何人都可以使用它或者这是一个JDK错误吗?

更新:我觉得自己像个白痴,Pattern.compile("\\.jar(?=!)")确实有用。我使用的是Matcher.matches()而不是Matcher.find()。

2 个答案:

答案 0 :(得分:1)

使用正则表达式适合我(使用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

(没有!)

答案 1 :(得分:0)

另外,你可以尝试拳击它

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(?=[!])