Как набрать ":" ("двоеточие") в регулярном выражении? - PullRequest
57 голосов
/ 05 июля 2011

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

Ответы [ 4 ]

96 голосов
/ 05 июля 2011

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

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

4 голосов
/ 05 июля 2011

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

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

Для получения дополнительной информации о Java регулярновыражения, см. документы .

0 голосов
/ 05 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...