@@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