Есть еще ретроспективная проверка: (?<=...) и (?<!...)
Хорошо если кто-то в статье упомянет про опережающие/ретроспективные проверки, а то давно заметил, что кто Фридла не читал, про них обычно не знает. В результате чтоб вставить подстроку внутрь строки пишут нечто ужасное.
плейсхолдер (?R) просто в это место вставляет весь шаблон регулярного выражения. причём он всегда вставляется условно с квантификатором количества {,1}.
Если кто-то считает, что копипаст кусочков из книги Фридла (прекрасной книги, я считаю) — это достойный материал для статьи — то он глубоко ошибается, имхо. Если уж приводите такие кусочки — потрудитесь, хоть что-нибудь добавить от себя, объяснить или привести примеры. Книжка большая, если так дальше пойдет, то мы получим просто ее электронную версию в данном блоге в виде нескольких сотен топиков, что никому в общем то не пригодится. В частности данный топик, я считаю, мало полезен хотя бы потому, что он касается только egrep, хотя pcre — существенно более распространен (javascript,python, php ...).
Да, это здорово, конечно, но тот кусочек, который вы запостили — введет многих в заблуждение. Особенно новичков. То, что это не про pcre можно только догадаться по последнему предложению, где в виде ссылки упоминается, что кое-что тут не поддерживается в некоторых версиях egrep. Но новичек (а профи тут и читать нечего) вообще понятия не имеет ни про диалекты ни про НКА vs ДКА — зато он увидит, что \< — это граница слова и будет пытаться это применить — в чем? Конечно в php, python, javascript. А там это вообще не соответствует действительности, ибо граница слова \b. Ну и что даст такая «табличка» новичку?
В руби (у вас в профиле он стоит в качестве интересов), кстати, тоже pcre, что говорит мне о том, что вы и сами то не очень разбираетесь в разновидностях регулярок и запостили сюда табличку «1.3 Сводка метасимволов egrep» не очень понимая ее смысла (ведь в руби \< это тоже не граница слова). Не верите?
Давайте посмотрим найдет ли регулярка \<cat\> в руби (или яваскрипте — неважно) слово cat в строке 'I like cat, eeee'. Проверьте, а потом отпишите результат. Если вам лень, отвечу сам — нет, не найдет. Хотя если верить тому, что написано в топике — найдет еще как.
Не поймите меня неверно, я лично против вас ничего не имею, но я считаю, что топики должны писать люди хотя бы «хорошо» разбирающиеся в предмете, а не по принципу «увидел табличку, понравилось, решил поделиться».
Самая большая проблема регвыров — это экранирование символов. Особенно достает то, что в разных средах надо по-разному экранировать, и поэтому регвыры из одной среды просто так в другой среде не заработают.
Я постоянно путаюсь, где надо или где ненадо экранировать, особенно в консоли Linux.
— То, что в двойных кавычках — вроде как ненадо.
— То что без кавычек — вроде как надо, чтоб шелл сам не разгребал строку по уравлящим символам.
— При поиске в MidnightCommander — надо двойное экранирование
— В коде PHP уже не помню, но вроде как нужно одинарное экранирование. Причем ereg глючно само по себе, об этом надо просто знать и пользоваться pgrep_ функциями.
Учитывая сложность самих регвыров, использовать их из-за такого зоопарка весьма затруднительно.
Регулярные выражения — символьные классы, конструкция выбора, метапоследовательности