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


              

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


Используя регулярное выражение, полученное на предыдущем шаге, мы можем выделить из текста сразу несколько типов тегов, используя конструкцию «альтернативная последовательность при отсутствии совпадения слева». В описании используем термин «альтернативная последовательность».
Добавим выделение из текста всего содержимого абзацев и пунктов списка:
  • Найдём подстроку '<'

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

    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 и всё их содержимое.

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