Мониторинг обменных курсов валют
18c0693f

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


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

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

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

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






                    Самый выгодный курс обмена валюты