Kann ich mit dotall einen nicht-gierigen Regex haben?

8

Ich möchte dotall und nicht-gierig zusammenbringen. Das ist was ich habe:

%Vor%

Dies ist jedoch nicht nicht gierig. Diese Daten stimmen nicht wie erwartet überein:

%Vor%

und ich kann nicht verstehen warum.

Was ich in der obigen Regel sage, ist:

  

Beginne mit "img", dann erlaube 0 oder mehr irgendein Zeichen einschließlich neuer Zeile, dann suche nach mindestens 1 "onmouseover", dann erlaube 0 oder mehr irgendein Zeichen einschließlich neuer Zeile, dann ein "a"

Warum funktioniert das nicht wie erwartet?

Hauptpunkt: dotall muss aktiviert sein

    
rikAtee 29.02.2012, 22:41
quelle

2 Antworten

15

Es ist nicht gierig. Es ist dein Verständnis von nicht gierig, das ist nicht korrekt.

Ein Regex wird immer versuchen, eine Übereinstimmung zu finden.

Lassen Sie mich ein vereinfachtes Beispiel dessen zeigen, was nicht gierig ist (wie von einem Kommentar vorgeschlagen):

%Vor%

Dies wird übereinstimmen:

  • möglichst wenige Wiederholungen von "a" (in diesem Fall 2)
  • gefolgt von einem "b"
  • und so wenige Wiederholungen von "c" wie möglich (in diesem Fall 0)

also ist die einzige Übereinstimmung 'aab' .

Und nur zum Schluss:

Verwenden Sie Regex nicht, um HTML zu analysieren. Es gibt Bibliotheken, die für den Job gemacht wurden. re gehört nicht dazu.

    
stranac 29.02.2012, 23:03
quelle
5

Zunächst einmal sieht deine Regex ein wenig unkonventionell aus: Du sagst "img", dann eine beliebige Anzahl von Zeichen, "onmouseover" mindestens einmal, aber möglicherweise wiederholt (z. B. "aufMouseovermouseovermouseover"), gefolgt von einer beliebigen Zahl von Zeichen, gefolgt von "a".

Dies sollte von img src="icon_ bis hin zu onmouseover="Cha passen. Das ist wahrscheinlich nicht das, was du willst, aber es ist das, wonach du gefragt hast.

Zweitens, und das ist viel wichtiger:

VERWENDEN SIE KEINE REGELMÄSSIGEN EXPESSIONEN, um HTML zu PARKEN.

Und falls Sie es beim ersten Mal nicht verstanden haben, lassen Sie es mich in Kursivschrift wiederholen:

VERWENDEN SIE KEINE REGELMÄSSIGEN EXPESSIONEN, um HTML zu PARKEN.

Schließe mich abschließend dem kanonischen Grimoire zu diesem Thema zu:

Sie können [X] HTML nicht mit einem Regex analysieren

    
tylerl 29.02.2012 23:20
quelle

Tags und Links