2012-03-05 3 views
0

J'apprends des expressions régulières et plus particulièrement des limites de mots. J'ai un morceau de code que je pense devoir retourner au moins un match mais ce n'est pas le cas.Essayer de comprendre les limites de mots

Quel est le problème avec le code que j'utilisé

public static void main(String[] args) 
{ 
    boolean matches; 
    String [] various = {"Men of honour", "X Men", "Children of men", "Company men are great"}; 

    for(int i = 0; i < various.length; i++) 
    { 
     matches = Pattern.matches("\\bMen", various[i]); 

     System.out.println("Does the string match the pattern? " + matches); 
    } 



} 

eteint est le suivant

Does the string match the pattern? false 
Does the string match the pattern? false 
Does the string match the pattern? false 
Does the string match the pattern? false 

Répondre

1

Lorsque vous utilisez .matches(), vous demandez au moteur de regex si votre motif correspond à toute la chaîne d'entrée. Cependant, vous voulez savoir si votre motif peut être trouvé quelque part dans la chaîne d'entrée.

Utilisation:

Pattern.compile("\\bMen").matcher(various[i]).find() 
5

Ce n'est pas à cause des limites de mots. C'est parce que la méthode .matches() nécessite la chaîne entière pour correspondre. Il ne peut pas extraire des sous-requêtes.

Vous voulez quelque chose comme

Pattern regex = Pattern.compile("\\bMen", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); 
for(int i = 0; i < various.length; i++) 
{ 
    Matcher regexMatcher = regex.matcher(various[i]); 
    matches = regexMatcher.find(); 
    System.out.println("Does the string match the pattern? " + matches); 
}