Положительный взгляд на восклицательный знак - PullRequest
1 голос
/ 16 ноября 2008

Я пытаюсь создать регулярное выражение Java для соответствия ".jar!"

Загвоздка в том, что я не хочу, чтобы устройство сравнения использовало восклицательный знак. Я пытался использовать Pattern.compile("\\.jar(?=!)"), но это не удалось. Как и избежать восклицательного знака.

Кто-нибудь может заставить это работать или это ошибка JDK?

ОБНОВЛЕНИЕ : Я чувствую себя идиотом, Pattern.compile("\\.jar(?=!)") работает. Я использовал Matcher.matches () вместо Matcher.find ().

Ответы [ 2 ]

1 голос
/ 16 ноября 2008

Использование вашего регулярного выражения работает для меня (с использованием 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

(без!)

0 голосов
/ 16 ноября 2008

Кроме того, вы можете попробовать бокс

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...