Hi!
Hätte ich nie gedacht, nur die regulären Ausdrücke sind noch sehr wirr :-) Ich mach das lieber "zu Fuß", etwas komplizierter, naja - fehlt noch die Erfahrung.
Also, wenn du das anders machen willst, viel Spass beim Programmieren ;)
Ich glaube, dass hier RegularExpressions in Anbetracht des Zeitaufwandes die beste Lösung sind.
nein, ich meinte meine RegEx ist noch etwas komplizierter als es sein muß :-)
Ay caramba, sieht ja ziemlich krass aus. Es scheint du hast etwas gegen meine (.*?)'s zu haben??? - was machst du denn mit ([0-9]{1,5}.[0-9]{2})??? - Die Zahl auslesen, klar. Aber das geht viel einfacher mit (.*?)! - Ist einige Bytes kürzer...
ich verstehe halt nicht, was das ist :-) (.*) verstehe ich, bedeutet irgendein Zeichen(0-unendlich viele) außer newline, oder? Aber was soll dann noch das '?' ?
Ach so, also hier die Erklärungen:
* : Matched 0 oder mehrmals
- : Matched 1 oder mehrmals
? : Matched 0 oder 1 mal.
Aber was soll jetzt das Konstrukt (.*?)? :
Normalerweise ist die RegEngine so konfiguriert, dass sie _möglichst_ viel matched. Was wir aber in deinem Beispiel brachen, ist exakt der String zwischen <b> und </b> und nicht zwischen dem ersten Vorkommen von <b> und dem _letzten_ von </b>. Das kann man mit (.*?) machen, dann wird nämlich die kleinst mögliche String gematched (das ? am Schluss bewirkt dies), als beispiel:
hello <b>world</b> <b>hello</b>
bei */+ wird der erste Match "world</b> <b>hello", jedoch bei (.*?) wird nur "world" geliefert. Also der kleinst mögliche Match.
SEHR INTERESSANT!
die '<' und '>' musst du übrigens nicht escapen.
hatte alles mögliche verändert, aber hast Recht!
Allgemein: Du hast einen String mit zwei Werten die du kennst (<b> und </b> im Beispiel) und suchst die Zeichenfolge (eg. WKN im Beispiel), welche genau zwischen diesen beiden Tags steht; das geht am einfachsten über <b>(.*?)</b>. Also ich konnte so das ganze Problem lösen und mein Perl-progi was ich gepostet hatte, hat auch funktioniert.
das problem, <b></b> kommt mehrmals in der zeile vor! Deine version funkionierte definitiv nicht bei mir. Hab das aber mal vereinfacht, kann man da jetzt noch mehr vereinfachen? beachte das ich links von $wkn noch den Namen extrahiere, der aus Buchstaben aber auch aus codierten Umlauten besteht:
/>([\w&;.\s_-]+)</a>.*$wkn</td>\s.*<b>(.*?)</b><br/i
Wenn ich den Vorderen Ausdruck auch durch (*.?) ersetze, pasiert folgendes: http://www.knet-systems.de/fso.php
Upsa, jep, wohl nicht grad das gewollte Ergebnis :-(
(.*?) statt (*.?)...?
Aber wenn du links und rechts von (.*?) eine bekannte Zeichenfolge hast, sollte es eigentlich schon funktionieren (wie gesagt, bei mir hat es ja wunderprächtig funktioniert, sogar mit mehreren <b>(.*?)</b> - Kombinationen).
ich habe da auch (*.?) stehen, habe mich vertippt im Posting. Aber bedenke, das ich den Ausdruck noch nach "rechts" ausgebaut habe, das hattest Du vorher nicht, deiner fing erst bei $wkn an, und hat noch ein paar Daten mehr, aber links davon gespeichert.
So wie darüber geht es ohne Probleme!
Ich kann mir zwar nicht erklären, warum; aber wenns funktioniert ist's ja OK und kannst es so lassen.
PS: Du hast doch Perl installiert, nicht? - Dann kannst ja mal
Mit einem falschen Zeichen kann man schon ne ganze Menge verhunzen!
perldoc perlre
Ja, aber wo ausführren? In SSH geht das nicht, auch nicht mit '$' der 'perl' davor. Wo sonst?
ist das was anderes als 'man perl' in der SHELL?
Grüße
Andreas