web-dev-qa-db-fra.com

Comment taper ":" ("deux points") dans une expression rationnelle?

: ("deux points") a une signification particulière dans regexp, mais je dois l’utiliser tel quel, comme [A-Za-z0-9.,-:]*. J'ai essayé d'y échapper, mais ça ne marche pas [A-Za-z0-9.,-\:]*

58
javapowered

Dans la plupart des implémentations regex (y compris Java), : n'a aucune signification particulière, ni à l'intérieur ni à l'extérieur d'une classe de caractères.

Votre problème est probablement dû au fait que le - agit comme un opérateur de plage dans votre classe:

[A-Za-z0-9.,-:]*

,-: fait correspondre tous les caractères ascii compris entre ',' et ':'. Notez qu'il correspond toujours au littéral ':' toutefois!

Essayez ceci à la place:

[A-Za-z0-9.,:-]*

En plaçant - au début ou à la fin du cours, il correspond au littéral "-". Comme mentionné dans les commentaires de Keoki Zee, vous pouvez également échapper à la - à l'intérieur de la classe, mais la plupart des gens l'ajoutent simplement à la fin.

Une démo:

public class Test {
    public static void main(String[] args) {
        System.out.println("8:".matches("[,-:]+"));      // true: '8' is in the range ','..':'
        System.out.println("8:".matches("[,:-]+"));      // false: '8' does not match ',' or ':' or '-'
        System.out.println(",,-,:,:".matches("[,:-]+")); // true: all chars match ',' or ':' or '-'
    }
}
98
Bart Kiers

Faites attention, - a une signification particulière avec regexp. Dans un [], vous pouvez le poser sans problème s'il est placé à la fin. Dans ton cas, ,-: est pris comme de , à :.

9
SteeveDroz

Le côlon n'a pas de signification particulière dans une classe de caractères et il n'est pas nécessaire de lui échapper. Selon the PHP docs regex , les seuls caractères à échapper d'une classe de caractères sont les suivants:

Tous les caractères non alphanumériques autres que \, -, ^ (au début) et la terminaison ] sont des classes de caractères non spéciales, mais cela n’est pas préjudiciable si elles sont échappées.

Pour plus d'informations sur les expressions régulières Java, voir les docs .

4
user456814

utilisation \\: au lieu de \:.. le \ _ a une signification particulière dans les chaînes Java.

0
Anantha Sharma