Skip to content

Kopfschmerz durch reguläre Ausdrücke

Ich habe jetzt eine halbe Stunde mit regulären Ausdrücken (RE) rumgespielt, um zu erreichen, dass ein Ausdruck sowohl <td><a href="mailto:email@email.de">email@email.de</a></td> als auch <td></td> matcht. Und ich versteh einfach nicht, warum das mein ursprünglicher Ausdruck nicht tut. Vielleicht kann mir ja jemand erklären, was da vor sich geht.

Jimi Hendrix, Voodoo guitar

Ich hätte gemeint, dass <td>(?.*?:mailto:(.*?)".*?)?</td> beide Textstellen matcht. Da mich nur die email-Adresse interessiert, packe ich alles drumrum mit (?: )in eine ‘unnamed group’. Das ? sollte bewirken, dass die unnamed group 0 oder 1 mal gematcht wird. Dieser Ausdruck matcht aber nicht <td></td>.

Mit <td>*?:(?.mailto:(.*?)")?.*?</td> erhalte ich nicht mehr die email-Adresse.

Die Lösung ist <td>.*?(?:mailto:(.*?)".*?)?</td>. Dieser RE matcht sowohl den leeren Eintrag, als auch den Eintrag mit einer email-Adresse.

Kann mir das jemand erklären? Für mich sind reguläre Ausdrücke wie Voodoo. Ich hab’ nur grad kein Hühnchen bei der Hand…

Post a Comment

Your email is never published nor shared. Required fields are marked *