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

       

Выделение требуемых тегов


Используя регулярное выражение, полученное на предыдущем шаге, мы можем выделить из текста сразу несколько типов тегов, используя конструкцию «альтернативная последовательность при отсутствии совпадения слева». В описании используем термин «альтернативная последовательность».

Добавим выделение из текста всего содержимого абзацев и пунктов списка:

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

    1. подстроку 'p'
    2. Добавим альтернативную последовательность
    3. подстроку 'li'
    4. Завершим захватывать совпадения
    5. Произведём проверку на удачное совпадение справа набора символов '\s>'
    6. Захватим 0 или более символов, не совпадающих с набором символов '>'
    7. Захватим подстроку '>'
    8. Начнём захватывать символы в последовательность

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



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

          1. '</'
          2. совпадение найденное на шагах 2-3 (ссылка на последовательность 1)
          3. '>'
          4. Завершим проверку
          5. Захватим любой символ
          6. Завершим захватывать совпадения
          7. Захватим последовательность 0 или более раз
          8. Завершим захватывать совпадения
          9. Захватим подстроку '</'
          10. Захватим совпадение найденное на шагах 2-3 (ссылка на последовательность 1)
          11. Захватим подстроку '>'
          12. Пункты 7 и 8 были добавлены для того, чтобы выражение не захватывало теги, начало которых совпадает с выделяемыми тегами. Например, чтобы при поиске тега <p> не были захвачены теги <param>.

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

          13. <
          14. (

            1. p
            2. |
            3. li
            4. )
            5. (?=[\s>])
            6. [^>]*
            7. >
            8. (

              1. (?:

                1. (?!

                  1. </
                  2. \1
                  3. >
                  4. )
                  5. .
                  6. )
                  7. *
                  8. )
                  9. </
                  10. \1
                  11. >
                  12. Новое регулярное выражение:

                    <(p|li)(?=[\s>])[^>\w]*>((?:(?!</\1>).)*))</\1>

                    Теперь в тексте будут выделены только теги p и li и всё их содержимое.



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