Выделение парных тегов
Запишем правила разбора формальным языком:
- Захватим одну или более букву алфавита
- Завершим захватывать совпадения
- Захватим 0 или более символов, не совпадающих с набором символов '>'
- Захватим подстроку '>'
- Начнём захватывать символы в последовательность
- Начнём захватывать символы в несохраняющую последовательность
- Начнём проверку на отсутствие удачного совпадения справа последовательности из
- '</'
- совпадение найденное на шагах 2-3 (ссылка на последовательность 1)
- '>'
- Завершим проверку.
- Захватим любой символ
- Завершим захватывать совпадения.
- Произведём захват 0 или более раз
- Завершим захватывать совпадения.
- Захватим подстроку '</'
- Захватим совпадение найденное на шагах 2-3 (ссылка на последовательность 1)
- Захватим подстроку '>'
- <
- (
- \w+
- )
- [^>]*
- >
- (
- (?:
- (?!
- </
- \1
- >
- )
- .
- )
- *
- )
- </
- \1
- >
Итак, у нас получилось следующее выражение:
<(\w+)[^>]*>((?:(?!</\1>).)*))</\1>
Оно захватывает любые парные теги вместе с содержимым.
Содержание раздела
- (?!
- (?:
Теперь, когда задача точно описана, можно приступить к записи её в виде регулярного выражения:
- Начнём проверку на отсутствие удачного совпадения справа последовательности из
- Начнём захватывать символы в несохраняющую последовательность