Добавим в основное выражение проверку на определённые атрибуты
Опишем задачу формальным языком:
- Захватим подстроку 'p'
- Добавим альтернативную последовательность
- Захватим подстроку 'li'
- Завершим захватывать совпадения
- Захватим 1 или больше символов \s
- Захватим минимальные 0 или больше символов, не совпадающих с набором символов '>'
- Добавим регулярное выражение с шага 4: class\s*=\s*(['»])content\1
- Захватим 0 или более символов, не совпадающих с набором символов '>'
- Захватим подстроку '>'
- Начнём захватывать символы в последовательность
- Начнём захватывать символы в несохраняющую последовательность
- Начнём проверку на отсутствие удачного совпадения справа последовательности из
- '</'
- совпадение, найденное на шагах 2-3 (ссылка на последовательность 1)
- '>'
- Завершим проверку
- Захватим любой символ
- Завершим захватывать совпадения
- Захватим последовательность 0 или более раз
- Завершим захватывать совпадения
- Захватим подстроку '</'
- Захватим совпадение, найденное на шагах 2-3 (ссылка на последовательность 1)
- Захватим подстроку '>'
- <
- (
- p
- |
- li
- )
- \s+
- [^>]*?
- class\s*=\s*(['»])content\2
- [^>]*
- >
- (
- (?:
- (?!
- </
- \1
- >
- )
- .
- )
- *
- )
- </
- \1
- >
Результирующее выражение:
<(p|li)\s+[^>]*?class\s*=\s*(['"])content\2[^>]*>((?:(?!</\1>).)*)</\1>
Содержание раздела
- (?!
- (?:
Переводим её в операторы регулярного выражения:
- Начнём проверку на отсутствие удачного совпадения справа последовательности из
- Начнём захватывать символы в несохраняющую последовательность