Подтвердить что ты не робот

Как ввести ":" ( "двоеточие" ) в regexp?

: ( "двоеточие" ) имеет особое значение в regexp Но мне нужно использовать его как есть, например [A-Za-z0-9.,-:]* Я пытался избежать этого, но это не работает [A-Za-z0-9.,-\:]*

4b9b3361

Ответ 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 '-'
    }
}

Ответ 2

Будьте осторожны, - имеет специальное значение с regexp. В [] вы можете поставить его без проблем , если он помещен в конец. В вашем случае ,-: принимается как от , до :.

Ответ 3

Colon не имеет особого значения в символьном классе и не нуждается в экранировании. Согласно PHP regex docs, единственные символы, которые должны быть экранированы в классе символов, следующие:

Все символы, отличные от алфавитно-цифровых символов чем \, -, ^ (в начале) и завершение ] не являются особыми в классы символов, но это не наносит вреда если они экранированы.

Подробнее о регулярных выражениях Java см. документы.

Ответ 4

используйте \\: вместо \:.. \ имеет особое значение в java-строках.