2008-11-15 3 views
1

Je suis en train de construire une expression régulière Java pour correspondre « .jar! »positive pour préanalyse point d'exclamation

Le hic est que je ne veux pas que la matcher de consommer le point d'exclamation. J'ai essayé d'utiliser Pattern.compile("\\.jar(?=!)") mais cela a échoué. Comme d'échapper au point d'exclamation.

Quelqu'un peut-il faire fonctionner cela ou est-ce un bug JDK?

MISE À JOUR: Je me sens comme un idiot, Pattern.compile("\\.jar(?=!)") fonctionne. J'utilisais Matcher.matches() au lieu de Matcher.find().

+0

Ne supprimez pas, cela est encore informatif à d'autres qui peuvent faire la même erreur. –

+0

http://www.oleswanson.com/images/office/mistakes.jpg :) –

+0

Assez juste, je vais le laisser pour le moment :) – Gili

Répondre

1

Utilisation de votre regex fonctionne pour moi (en utilisant Sun JDK 1.6.0_02 pour 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."); 
       } 
     } 
} 

impressions:

Match: .jar 

(sans!)

+0

Merci Avi, tu as raison! – Gili

+0

Votre problème était peut-être que vous utilisiez Matcher.matches() au lieu de .find(), ce qui nécessite que le modèle d'entrée entier corresponde. – Avi

0

De plus, vous pouvez essayer la boxe il

Pattern.compile("\\.jar(?=[!])") 

Java doit être brisé: 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(?=[!]) 

+0

Je viens d'essayer et malheureusement ça ne marche pas. – Gili

+0

Il n'est pas sémantiquement différent du modèle dans la question. – Avi

+0

Vous avez raison. J'ai mis à jour la question. – Gili

Questions connexes