Mit den .+? bin ich inzwischen etwas vorsichtig.
Ich nehme da lieber das negierte Endzeichen, also z.B. [^<]+ um bis zum nächsten Tag zu matchen.
Wenn man relativ lange Patterns mit vielen Catching-Groups und eine sehr lange Eingabe hat,
führen die reluctant quantifiers teilweise zu einer Laufzeit die gegen unendlich geht.
Das lustige war halt echt, dass man beim Debugging sehen konnte, dass jeder Match länger braucht und ab Match Nr.X konnte man den Debugger auch 1 Stunden laufen lassen, da kam einfach nichts.
Das einzige was ich gefunden habe, was dieses Verhalten erklären KÖNNTE ist das hier:
http://www.regular-expressions.info/catastrophic.html ODER
http://swtch.com/~rsc/regexp/regexp1.htmlWirksame Gegenmaßnahmen waren:
- Die Eingabe mit einer EINFACHEN Regex in Chunks splitten und dann auf die einzelnen Teile die komplexe Regex anwenden.
- reluctant quantifiers gegen negierte Endzeichen ersetzen
Nur mal so am Rande, damit man es im Hinterkopf hat, falls man mal aus Versehen eine Regex-Endlosschleife programmiert.
...es ist eben keine Endlosschleife
— geändert am 21.06.2012, 09:58:23
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.