J'utilise RegexBuddy lorsque je travaille avec des expressions régulières. À partir de sa bibliothèque, j'ai copié l'expression régulière pour faire correspondre des URL. Je l'ai testée avec succès dans RegexBuddy. Cependant, lorsque je l'ai copiée en tant que Java String
et collé dans le code Java, cela ne fonctionne pas. La classe suivante imprime false
:
public class RegexFoo {
public static void main(String[] args) {
String regex = "\\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]";
String text = "http://google.com";
System.out.println(IsMatch(text,regex));
}
private static boolean IsMatch(String s, String pattern) {
try {
Pattern patt = Pattern.compile(pattern);
Matcher matcher = patt.matcher(s);
return matcher.matches();
} catch (RuntimeException e) {
return false;
}
}
}
Quelqu'un sait-il ce que je fais mal ?
5 votes
Sergio, ne pas attraper RuntimeException. Cela peut introduire des bogues subtils et c'est une mauvaise pratique en général. Si vous voulez simplement ignorer le scénario où l'expression est illégale, utilisez : } catch ( PatternSyntaxException pse ){} à la place. Voir le point 57 de : java.sun.com/docs/books/efficace
0 votes
Vous pouvez également utiliser Pattern patt = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE) ; pour éviter de modifier la regex afin qu'elle corresponde à la fois aux majuscules et aux minuscules.
0 votes
Je sais que c'est vraiment vieux ('08), mais pour tous ceux qui ont des problèmes similaires, RegexBuddy a l'onglet "Utiliser". Assurez-vous de sélectionner d'abord la version Java 7, puis dans le panneau "Utilisation", vous pouvez le laisser générer le code Java pour votre cas spécifique. Cela a bien fonctionné pour moi.