@@Henry
Naja, zum letzten Mal und nur für dich 😉, sagt dir Lazarus jetzt:
.*(?:lat).*=.*(?:"|')(.*)(?:"|')\D.*(?:lon).*=.*(?:"|')(.*)(?:"|')\D
Der Ausdruck findet in <trkpt latte-macchiato="lecker" lat="53.188185" lon="7.216993"></trkpt>
„lecker“, nicht 53.188185. Soll das so?
Um das =
willst du nicht irgendwelche Zeichen (.*
) stehen haben, sondern (optionalen) Whitespace (\s*
).
Und vor (?:lat)
ebenfalls Whitespace (\s+
), sonst gibt’s bei <trkpt caffe-lat="lecker" lat="53.188185" lon="7.216993"></trkpt>
auch „lecker“.
(?:"|')(.*)(?:"|')
für Attributwerte ist auch keine gute Idee; bei "it's cold outside"
siehst du es: „it“, nicht den ganzen Attributwert.
Wenn schon, dann sowas wie (?:"([^"]*)"|'([^']*)')
.
Und ehe wir jetzt noch weitere 1001 Fälle berücksichtigen, sehen wir lieber alle ein, dass reguläre Ausdrücke zum Parsen von XML so eher wenig geeignet sind. Eher gar nicht.
LLAP 🖖
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann