Pull to refresh

Comments 6

«Паттерн \(.+\) совпадет в строке «тут текст (скобочка) а тут еще текст (еще скобочка) и тут текст» с частью «(скобочка) а тут еще текст (еще скобочка)»»

А что будет, если написать \(.+?\)
Тогда будет работать, но только без вложенных скобок. Поиск для второй строки будет опять неправильный, поскольку через регэксп в общем случае нельзя задать произвольную глубину проверки сбалансированности скобок. Только до какой-то заранее заданной. Причем для глубины 2 будет уже приличное выражение, которое даже автор не сходу поймет.
Не буду рассматривать дальше этот пример, поскольку в общем случае проблему сбалансированных скобок нельзя решить только с помощью регулярных выражений. В .NET есть специальная конструкция, которая позволяет решить задачу проверки сбалансированности (именно проверки)
В PCRE есть рекурсия «(?R)», она решает эту проблему. В остальных движках бывает возможность использования рекурсивных групп.

Но это тоже только для проверки.
Всем рекомендую прочитать именно книгу (Джеффри Фридл. Регулярные выражения). Она давненько есть в продаже на русском языке. Автору конечно спасибо за статью, прочитав которую я некоторые моменты работы с регулярными освежил в памяти.
Но эта книга у меня всегда на столе под рукой и могу сказать, что она одна из самых лучших, в плане доступности изложенного материала (не смотря его на очевидную сложность), из прочитанных мной книг. Если есть желание не только освоить, но и стать специалистом по регулярным выражениям, очень ее советую ее прочитать.
Поддерживаю, книга написана очень интересно. Пока пишу статью заодно проверяю насколько я помню то, что когда-то прочитал :)
Sign up to leave a comment.

Articles