Werte aus Textdatei exhumieren
bearbeitet von Gunnar Bittersmann@@Henry
> Naja, zum letzten Mal und nur für dich 😉, sagt dir Lazarus jetzt:
>
> ~~~php
> .*(?:lat).*=.*(?:"|')(.*)(?:"|')\D.*(?:lon).*=.*(?:"|')(.*)(?:"|')\D
> ~~~
Der Ausdruck findet in `<trkpt latte-macchiato="lecker" lat="53.188185" lon="7.216993"></trkpt>`{:.language-xml} „lecker“, nicht 53.188185. Soll das so?
Um das `=` willst du nicht irgendwelche Zeichen (`.*`{:.bad}) stehen haben, sondern (optionalen) Whitespace (`\s*`).
Und vor `(?:lat)` ebenfalls, sonst gibt’s bei `<trkpt caffe-lat="lecker" lat="53.188185" lon="7.216993"></trkpt>`{:.language-xml} 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