Comments 6
«Паттерн \(.+\) совпадет в строке «тут текст (скобочка) а тут еще текст (еще скобочка) и тут текст» с частью «(скобочка) а тут еще текст (еще скобочка)»»
А что будет, если написать \(.+?\)
А что будет, если написать \(.+?\)
0
Тогда будет работать, но только без вложенных скобок. Поиск для второй строки будет опять неправильный, поскольку через регэксп в общем случае нельзя задать произвольную глубину проверки сбалансированности скобок. Только до какой-то заранее заданной. Причем для глубины 2 будет уже приличное выражение, которое даже автор не сходу поймет.
+1
Не буду рассматривать дальше этот пример, поскольку в общем случае проблему сбалансированных скобок нельзя решить только с помощью регулярных выражений. В .NET есть специальная конструкция, которая позволяет решить задачу проверки сбалансированности (именно проверки)В PCRE есть рекурсия «(?R)», она решает эту проблему. В остальных движках бывает возможность использования рекурсивных групп.
Но это тоже только для проверки.
0
Очень интересно, жду продолжения.
0
Всем рекомендую прочитать именно книгу (Джеффри Фридл. Регулярные выражения). Она давненько есть в продаже на русском языке. Автору конечно спасибо за статью, прочитав которую я некоторые моменты работы с регулярными освежил в памяти.
Но эта книга у меня всегда на столе под рукой и могу сказать, что она одна из самых лучших, в плане доступности изложенного материала (не смотря его на очевидную сложность), из прочитанных мной книг. Если есть желание не только освоить, но и стать специалистом по регулярным выражениям, очень ее советую ее прочитать.
Но эта книга у меня всегда на столе под рукой и могу сказать, что она одна из самых лучших, в плане доступности изложенного материала (не смотря его на очевидную сложность), из прочитанных мной книг. Если есть желание не только освоить, но и стать специалистом по регулярным выражениям, очень ее советую ее прочитать.
0
Sign up to leave a comment.
Тонкости регулярных выражений. Часть 2: возвраты и их количество