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


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


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

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

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

  3. Завершим захватывать совпадения
  4. Захватим 0 или более символов, не совпадающих с набором символов '>'
  5. Захватим подстроку '>'
  6. Начнём захватывать символы в последовательность

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

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

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

      2. Завершим проверку.
      3. Захватим любой символ

    2. Завершим захватывать совпадения.
    3. Произведём захват 0 или более раз

  7. Завершим захватывать совпадения.
  8. Захватим подстроку '</'
  9. Захватим совпадение найденное на шагах 2-3 (ссылка на последовательность 1)
  10. Захватим подстроку '>'

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

  1. <
  2. (

    1. \w+

  3. )
  4. [^>]*
  5. >
  6. (

    1. (?:

      1. (?!

        1. </
        2. \1
        3. >

      2. )
      3. .

    2. )
    3. *

  7. )
  8. </
  9. \1
  10. >

Итак, у нас получилось следующее выражение:

<(\w+)[^>]*>((?:(?!</\1>).)*))</\1>

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




- Начало -  - Назад -  - Вперед -



Книжный магазин