Совпадение всего текста, но содержание тега html - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу сопоставить текст вне тега html в приведенном ниже примере. Что такое шаблон Regex, который мне следует использовать? Спасибо!

Match me 1 <div>Hello World!</div> Match me 2.

Обновление: это произвольный текст, плохо отформатированный HTML, но внутри него есть пользовательские теги / HTML, мне нужно извлечь текст, который не является внутри тега для дальнейшей обработки ...

1 Ответ

0 голосов
/ 23 апреля 2020

Попробуйте использовать этот шаблон:

(^([\s\S]*?)(?=<div>))|(((?<=<\/div>))([\s\S]*?)(?=<div>))|((?<=<\/div>)[\s\S]*)

Как это работает

^ Соответствует началу строки

\s Соответствует любому пробелу символу (пробелы, табуляции, разрывы строк)

\S Соответствует любому символу, который не является пробелом символа (пробелы, табуляции, разрывы строк )

* Совпадает с чем угодно, ? не жадно (соответствует минимально требуемое количество символов)

| Используется для объединения одного или нескольких шаблонов

() Выражение будет соответствовать группе

(?=<div>) Это групповая конструкция, для которой требуется экранирование <div>, прежде чем может быть выполнено какое-либо сопоставление.

Почему нужно ? здесь?

Match me1 <div><div>Hello World!</div> Match me 2 <div>Hello World!</div> Match me 3.

по умолчанию, регулярные выражения являются жадными, то есть они будут соответствовать как можно больше. Поэтому, если вы воспользуетесь приведенным выше шаблоном, он будет выделять весь текст до третьего <div>, но при добавлении не жадного квантификатора ? регулярное выражение будет выделять только весь текст до первого <div>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...