2008-11-15 3 views
1

Я пытаюсь построить регулярное выражение Java, чтобы соответствовать «.jar!»Положительный опережения для восклицательного знака

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

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

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

+0

Не удалять, это еще информативным для других, кто может совершить ту же ошибку. – 2008-11-15 21:58:14

+0

http://www.oleswanson.com/images/office/mistakes.jpg :) – 2008-11-15 21:59:31

+0

Достаточно честно, я оставлю это на данный момент :) – Gili 2008-11-15 22:18:58

ответ

1

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^