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


              

Выделение парных тегов


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

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

    1. Захватим одну или более букву алфавита

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

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

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

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

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

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

          1. '</'

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

          3. '>'

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

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

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

          7. Произведём захват 0 или более раз

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

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

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

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

          12. Теперь, когда задача точно описана, можно приступить к записи её в виде регулярного выражения:
          13. <

          14. (

            1. \w+

            2. )

            3. [^>]*

            4. >

            5. (

              1. (?:

                1. (?!

                  1. </

                  2. \1

                  3. >

                  4. )

                  5. .

                  6. )

                  7. *

                  8. )

                  9. </

                  10. \1

                  11. >

                  12. Итак, у нас получилось следующее выражение:
                    <(\w+)[^>]*>((?:(?!</\1>).)*))</\1>
                    Оно захватывает любые парные теги вместе с содержимым.

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