В большинстве реализаций регулярных выражений (включая Java) :
не имеет особого значения ни внутри, ни снаружи символьного класса.
Скорее всего, ваша проблема связана с тем, что -
действует какоператор диапазона в вашем классе:
[A-Za-z0-9.,-:]*
, где ,-:
соответствует всем символам ascii от ','
до ':'
.Обратите внимание, что он по-прежнему соответствует литералу ':'
, однако!
Попробуйте вместо этого:
[A-Za-z0-9.,:-]*
Поместив -
в начало или конец класса, он будет соответствовать литералу"-"
.Как упоминалось в комментариях Кеоки Зи, вы также можете избежать -
внутри класса, но большинство людей просто добавляют его в конце.
Демонстрация:
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 '-'
}
}