Sie müssen die DOTALL Modifikator ( /s
).
'/<div>(.*)<\/div>/s'
Das gibt Ihnen vielleicht nicht genau das, was Sie wollen, weil Sie zu gierig sind. Versuchen Sie stattdessen eine nicht-gierige Übereinstimmung:
'/<div>(.*?)<\/div>/s'
Man könnte das Problem auch lösen, indem man alles außer "<" abgleicht, wenn es keine anderen Tags gibt:
'/<div>([^<]*)<\/div>/'
Eine weitere Beobachtung ist, dass Sie nicht die /
als Begrenzungszeichen für reguläre Ausdrücke. Wenn Sie ein anderes Zeichen verwenden, müssen Sie das /
en </div>
zur Verbesserung der Lesbarkeit. Dies gilt für alle oben genannten regulären Ausdrücke. So würde es aussehen, wenn Sie '#' anstelle von '/' verwenden:
'#<div>([^<]*)</div>#'
Alle diese Lösungen können jedoch aufgrund von verschachtelten Divs, zusätzlichen Leerzeichen, HTML-Kommentaren und verschiedenen anderen Dingen fehlschlagen. HTML ist zu kompliziert, um es mit Regex zu parsen, daher sollten Sie stattdessen einen HTML-Parser verwenden.