Ответ 1
В большинстве реализаций регулярных выражений (включая 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 '-'
}
}