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

         

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


Запишем правила разбора формальным языком:

  • Найдём подстроку '<'
  • Начнём захватывать символы в последовательность

    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>

                    Оно захватывает любые парные теги вместе с содержимым.



                    Содержание раздела