Frage zu Regex
-
Wenn im Zeichenspezifizierer steht, er soll alle zeichen nehmen, tut er das auch. Du musst also auch die kombination, die das ende markiert, ausschließen.
-
Genau das ist das Problem. Hier mein Versuch "<" zeichen zu ignorieren :
<a(.?)>(.?)(?!<)Data</a>
-
roflo schrieb:
Wenn im Zeichenspezifizierer steht, er soll alle zeichen nehmen, tut er das auch. Du musst also auch die kombination, die das ende markiert, ausschließen.
Wie meinen?
Genau dafür ist non-greedy doch da.Ich weiß nicht ob das das Problem ist, aber du musst den Vorwärtsslash definitiv escapen.
Ansonsten kann ich das Problem nicht nachvollziehen, gib mal etwas Code und ein Sample.
-
Das ist meine aktuelel Version :
(<a){1,1}(.*)?>Data<\/a>
Ich bekomme weiterhin einen String mit dem ersten gefunden Link und bis zum "Data" Link
Habe bisher noch keine java code - probiere die Reg ex gerade auf der kommandozeile aus
-
Kommandozeile? Inwiefern? Ich vermute stark dass da irgendwas schiefgeht, nicht an dem Regex selber.
Und was soll das mit "{1,1}", das bringt doch nichts.Gib mal ein minimal Sample von Regex sowie Input, und sag genau was bei dir rauskommt.
-
Naja ich test das mit grep auf der command line
-
Verstehe, dann werden wir den Fehler wohl haben:
grep -P -o "<a(.*?)>(.*?)Daten<\/a>" test.txt
Rufst du es so auf?
Grep unterstützt per default keine non greedy modifier. Hat aber rein gar nix mit Java zu tun.
-
Nächster Versuch um alle Links vor dem geuchten Link zu ignorieren :
<a(.*?)href=(.+?)>(?!href)(.*)Data<\/a>
-
Wozu, hast du meine letzt Antwort gelesen? Gehts mit Java statt grep?
Überall gehts, nur mit grep nicht. ._.
-
DarkShadow44 schrieb:
roflo schrieb:
Wenn im Zeichenspezifizierer steht, er soll alle zeichen nehmen, tut er das auch. Du musst also auch die kombination, die das ende markiert, ausschließen.
Wie meinen?
Genau dafür ist non-greedy doch daIn der Tat, hab den OP wohl zu schnell gelesen. Für GNU grep sollte eigentlich mit -P das greedy ? unterstützen.
Edit:
Folgendes funktioniert:echo "<a href="index.php?id=299" onfocus="blurLink(this);">Daten</a>" | grep -Po "(?<=<a\s).*?(?=>Daten</a>)"
Gibt
href="index.php?id=299" onfocus="blurLink(this);"
aus.
-
Danke für die ganzen Antworten.
Ich habe allerdings etwas vergessen.
Der zu durchsuchende String sieht folgendermaßen aus :<a href="index.php?id=290" onfocus="blurLink(this);">BlaBlub1</a><a href="index.php?id=291" onfocus="blurLink(this);">Daten</a><a href="index.php?id=292" onfocus="blurLink(this);">BlaBlub2</a> <a href="index.php?id=293" onfocus="blurLink(this);">BlaBlub3</a>
Ich möchte nun den String
<a href="index.php?id=299" onfocus="blurLink(this);">Daten</a>
parsen und dann den link
index.php?id=299
extrahieren.
Kann mir da jemand noch mal helfen
-
Ich habe nun selber eine Lösung gefunden :
<a\s?href\s?=\s?[\'|\"](\w+.){1,4}[\'|\"]\s?\w+..\w+.\w+..[\'|\"].Ergebnisdienst
Vielelicht ist sie nicht optimal aber sie funktioniert.
-
Ich habe es jetzt noch einmal optimiert :
(<a\s["':a-zA-Z()_%&\.\?=0-9;]+(\s["':a-zA-Z()_%&\.\?=0-9;]+)?>\b)\w+Data
Nun möchte ich im nächsten Schritt nach einem SubString im Link suchen. Es sollen nur links gefunden werden, die auf klasse oder liga enden : z.B Bundesliga oder Kreisklasse
Mein erster Versuch :
(<a\s["':a-zA-Z()_%&\.\?=0-9;]+(\s["':a-zA-Z()_%&\.\?=0-9;]+)?>\b)\w+[klasse|liga]
Allerdings liedert diese suche auch andere Links. Nun meine Frage wie kann man in einem regulären Ausruck nach unterschiedlichen Substrings suchen.
Vielen Dank