Comments 8
// email адрес в формате xxx@xxx.xxx (регистр букв игнорируется)
Pattern pattern = Pattern.compile("^([a-z0-9_\\.-]+)@([a-z0-9_\\.-]+)\\.([a-z\\.]{2,6})$", Pattern.CASE_INSENSITIVE);
как устал от такой проверки
у меня есть домены *.company аж 7 символов!, только малая часть сайтов дают зарегать мыло на данном домене.
+5
Отличное продолжение, спасибо.
Все помнят классику: «У нас была проблема. Для ее устранения мы решили использовать регулярные выражения. Теперь у нас две проблемы.»?
Все помнят классику: «У нас была проблема. Для ее устранения мы решили использовать регулярные выражения. Теперь у нас две проблемы.»?
+1
Регулярные выражения в Java используют механизм НКА
Вовсе нет. Какой именно механизм должна реализовывать конкретная реализация JDK, нигде явно не описывается. Насчёт OpenJDK не знаю, но вот Apache Harmony, и отпочковавшийся от неё Android, используют обычный бэктрекинг. А вот НКА в чистом виде не подойдут, потому что НКА и ДКА распознают лишь регулярные грамматики, а вот «регулярные выражения» в духе Perl задают более обширный класс грамматик, если не изменяет память, не укладывающийся и в контекстно-свободные.
Нет никакого смысла использовать НКА, если всё равно любой НКА можно преобразовать в ДКА.
+1
если не изменяет память, не укладывающийся и в контекстно-свободные
Было бы грустно, если бы это было так. Как раз-таки укладывается в контекстно-свободные (как и большинство ЯП), но не укладываются в регулярные.
Нет никакого смысла использовать НКА, если всё равно любой НКА можно преобразовать в ДКА.
А это же извечный торг «скорость <-> память», нужно выбирать в зависимости от ситуации.
Мне однажды пришлось написать на коленке упрощенный поиск по wildcard (поддерживались * и ?, но не [ ]). Так вот там получилось очень хорошо применить НДА, который предусматривает возможность нахождения во множестве состояний. Смутно представляю, как бы я там использовал ДКА.
0
Ах не заметил я запятую между Pattern и Matcher, все же спасибо за статью.
+2
Sign up to leave a comment.
Обработка строк в Java. Часть II: Pattern, Matcher