Ответ 1
Вам нужно использовать модификатор DOTALL.
'/<div>(.*)<\/div>/s'
Это может не дать вам именно то, что вы хотите, потому что вы жадные соответствия. Вместо этого вы можете попробовать не-жадный матч:
'/<div>(.*?)<\/div>/s'
Вы также можете решить это, сопоставляя все, кроме '<' если нет других тегов:
'/<div>([^<]*)<\/div>/'
Другое замечание состоит в том, что вам не нужно использовать /
в качестве разделителей регулярных выражений. Использование другого символа означает, что вам не нужно скрывать /
в </div>
, улучшая читаемость. Это относится ко всем приведенным выше регулярным выражениям. Здесь будет выглядеть, если вы используете '#' вместо '/':
'#<div>([^<]*)</div>#'
Однако все эти решения могут выйти из строя из-за вложенных div, дополнительных пробелов, комментариев HTML и других вещей. HTML слишком сложный для синтаксического анализа с помощью Regex, поэтому вам следует рассмотреть возможность использования парсера HTML.