:
("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.,-\:]*
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.,-:]*
où ,-:
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 '-'
}
}
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 ,
à :
.
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 .
utilisation \\:
au lieu de \:
.. le \
_ a une signification particulière dans les chaînes Java.