Подтвердить что ты не робот

Как сделать совпадение символов в точках с использованием регулярных выражений

У меня есть строка, которая содержит обычные символы, белые кодировки и символы новой строки между и. Это регулярное выражение не работает: /<div>(.*)<\/div>. Это связано с тем, что .* не соответствует символам новой строки. Мой вопрос: как это сделать?

4b9b3361

Ответ 1

Вам нужно использовать модификатор DOTALL.

'/<div>(.*)<\/div>/s'

Это может не дать вам именно то, что вы хотите, потому что вы жадные соответствия. Вместо этого вы можете попробовать не-жадный матч:

'/<div>(.*?)<\/div>/s'

Вы также можете решить это, сопоставляя все, кроме '<' если нет других тегов:

'/<div>([^<]*)<\/div>/'

Другое замечание состоит в том, что вам не нужно использовать / в качестве разделителей регулярных выражений. Использование другого символа означает, что вам не нужно скрывать / в </div>, улучшая читаемость. Это относится ко всем приведенным выше регулярным выражениям. Здесь будет выглядеть, если вы используете '#' вместо '/':

'#<div>([^<]*)</div>#'

Однако все эти решения могут выйти из строя из-за вложенных div, дополнительных пробелов, комментариев HTML и других вещей. HTML слишком сложный для синтаксического анализа с помощью Regex, поэтому вам следует рассмотреть возможность использования парсера HTML.

Ответ 2

чтобы совместить все символы, вы можете использовать этот трюк:

%\<div\>([\s\S]*)\</div\>%

Ответ 3

Я знаю, что это старый, но так как я наткнулся на него недавно. Вы также можете использовать модификатор режима (?s) . Например.

(?s)/<div>(.*?)<\/div>

Ответ 4

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