Веб Дизайн - статьи


              

Добавим в основное выражение проверку на определённые атрибуты


Опишем задачу формальным языком:
  • Найдём подстроку '<'

  • Начнём захватывать символы в последовательность

    1. Захватим подстроку 'p'

    2. Добавим альтернативную последовательность

    3. Захватим подстроку 'li'

    4. Завершим захватывать совпадения

    5. Захватим 1 или больше символов \s

    6. Захватим минимальные 0 или больше символов, не совпадающих с набором символов '>'

    7. Добавим регулярное выражение с шага 4: class\s*=\s*(['»])content\1

    8. Захватим 0 или более символов, не совпадающих с набором символов '>'

    9. Захватим подстроку '>'

    10. Начнём захватывать символы в последовательность

      1. Начнём захватывать символы в несохраняющую последовательность

        1. Начнём проверку на отсутствие удачного совпадения справа последовательности из

          1. '</'

          2. совпадение, найденное на шагах 2-3 (ссылка на последовательность 1)

          3. '>'

          4. Завершим проверку

          5. Захватим любой символ

          6. Завершим захватывать совпадения

          7. Захватим последовательность 0 или более раз

          8. Завершим захватывать совпадения

          9. Захватим подстроку '</'

          10. Захватим совпадение, найденное на шагах 2-3 (ссылка на последовательность 1)

          11. Захватим подстроку '>'

          12. Переводим её в операторы регулярного выражения:
          13. <

          14. (

            1. p

            2. |

            3. li

            4. )

            5. \s+

            6. [^>]*?

            7. class\s*=\s*(['»])content\2

            8. [^>]*

            9. >

            10. (

              1. (?:

                1. (?!

                  1. </

                  2. \1

                  3. >

                  4. )

                  5. .

                  6. )

                  7. *

                  8. )

                  9. </

                  10. \1

                  11. >

                  12. Результирующее выражение:
                    <(p|li)\s+[^>]*?class\s*=\s*(['"])content\2[^>]*>((?:(?!</\1>).)*)</\1>

                    Содержание  Назад  Вперед