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


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


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

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

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

    1. подстроку 'p'
    2. Добавим альтернативную последовательность
    3. подстроку 'li'

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

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

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

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

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

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

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

Пункты 7 и 8 были добавлены для того, чтобы выражение не захватывало теги, начало которых совпадает с выделяемыми тегами. Например, чтобы при поиске тега <p> не были захвачены теги <param>.

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

  1. <
  2. (

    1. p
    2. |
    3. li

  3. )
  4. (?=[\s>])
  5. [^>]*
  6. >
  7. (

    1. (?:

      1. (?!

        1. </
        2. \1
        3. >

      2. )
      3. .

    2. )
    3. *

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

Новое регулярное выражение:

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

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




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



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