55 Stimmen

Punkt und Zeilenumbruch mit regulären Ausdrücken übereinstimmen lassen

Ich habe eine Zeichenkette, die normale Zeichen, weiße Zeichensätze und Zeilenumbrüche zwischen <div> und </div> enthält.

Dieser reguläre Ausdruck funktioniert nicht: /<div>(.*)<\/div> . Das ist so, weil .* passt nicht zu Zeilenumbruchzeichen. Wie kann ich das tun?

67voto

Mark Byers Punkte 761508

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.

21voto

Hossein Punkte 199

Um alle Zeichen abzugleichen, können Sie diesen Trick anwenden:

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

17voto

acarlon Punkte 15766

Sie können auch die (?s) Modusmodifikator . Zum Beispiel,

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

5voto

DavidsKanal Punkte 498

Es sollte kein Problem sein, es einfach zu tun:

(.|\n)

Dies entspricht entweder einem beliebigen Zeichen außer dem Zeilenumbruch または ein Zeilenumbruch, also jedes Zeichen. Zumindest bei mir hat das das Problem gelöst.

1voto

MillerMedia Punkte 3514

Eine Möglichkeit wäre:

'/<div>(\n*|.*)<\/div>/i'

Das würde passen entweder Zeilenumbruch oder der Punktbezeichner passt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X