
Комментарии 13
Как написать регулярное выражение, которое проверит, правильно ли расставленны скобки в арифметическом выражении?
(())()()(((()()))) - OK
(())) - не ОК
())(() - не ОК
Вопрос был с подвохом.
Я знаю, что баланс скобок регулярной грамматикой не описывается. При этом несколько удивлен, что в статье про регулярные выражения понятие регулярной грамматики даже не упоминается, как и не упоминаются ее ограничения.
POSIX regexp, кстати, нифига не регулярная грамматика. С возможностью ссылаться на уже разобранные части входного текста, она куда мощнее. Но и цена соответствующая, никакого O(n), где n - длина входного текста, она не гарантирует.
Регулярное выражение, даже если и получится такое написать, будет слишком сложным. Легче всего создать список из скобок и проверять, что для каждой закрывающейся, есть открывающая. После проверки удалять их из списка.
Адреса электронной почты не регулярны
Смотря что считать адресом.
Если адрес целиком, в терминах RFC822 ("Vasya Pupkin vasily@pupkin.com"), то там такая неудачная грамматика, что она не только не регулярная, а еще и backtracking требуется, чтобы этот синтаксис правильно разобрать.
А в той части, которая имя@домен - что в этом не регулярного?
хм, саппорт гугла говорит о синтаксисе для регулярных выражений: https://support.google.com/a/answer/1371415?hl=ru
Регулярные выражения: как научиться читать между строк