PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Gelöst] Tags, die Zahlen enthalten, finden


renet
24.05.2005, 13:46
Halli hallo!

Ich bin neu hier und bin neu in Sachen RegEx. Ich habe schon, sei es mit ein bisschen Glück, so einige Ausdrücke gefunden, die mir weitergeholfen haben, aber momentan stehe ich wirklich auf der Leitung.

Ich muss in einem XML-File alle Tags in Spitzenklammern (< und >) finden, die Zahlen von 0-9 enthalten. Dabei darf auch jedes andere Zeichen darin vorkommen, es darf jedoch nicht über die schließende >-Klammer DIESES Tags hinaus gesucht werden. Wichtig ist, dass ich auch Folgendes finden können muss:

<tag ... <noch ein tag...> irgend eine zahl 0 ...>

Hoffe mir kann da jemand weiter helfen. Vielen Dank schon mal im Voraus! :)


renet
28.05.2005, 16:29
Kann mir denn hier niemand weiterhelfen? :(

Erleichtert es die ganze Sache vielleicht, wenn "nur" Zahlen, die zwischen < und >, ODER < und <, ODER > und > stehen gefunden werden müssen? Das käme ja dann im Endeffekt aufs Gleiche hinaus. Bitte, brauche dringend eure Hilfe! Danke. :)

Jan Krüger
29.05.2005, 18:21
Beträchtlich leichter. Zum Beispiel:
(<|>) .* [0-9]+ .* (\1|>)

Wenn es übrigens nur um echtes, gültiges XML geht (wo verschachtelte Tags so, wie du sie im ersten Beitrag beschrieben hast, nicht möglich sind), dann gäbe es auch folgende Möglichkeit:

< [^<>]* [0-9]+ [^<>]* >

(Alle Leerzeichen sind aus Gründen der Übersichtlichkeit eingefügt und sollten weggelassen werden.)

renet
29.05.2005, 21:09
Danke für die Antwort. Mit obigem Code markiert er jedoch nur Sachen wie <a>bl0ck</a> oder sogar <a href="{1}">Link 1 von 9</a> oO ich wollte aber, dass er nur Sachen findet wie <a href="{1}"> oder <a href="/link/zu/d4t31.php"> .. Kannst du mir den Code dafür geben? ^^

Außerdem hat sich mir ein neues Problem eröffnet.+
Ursprünglich hatte die XML-Datei folgenden Aufbau einer Zeile:

<phrase name="activate"><![CDATA[Aktivieren]]></phrase>

Jetzt, nachdem ich sie in ein Programm geladen habe, mit dem ich NUR den Inhalt zwischen [CDATA[ und ]] durchsuchen und ersetzen konnte, sieht der Aufbau so aus:

<phrase name="activate">Aktivieren</phrase>

Macht das irgendeinen Unterschied? Mein Forum, dem diese Datei angehört, nimmt diese zwar (beim Importieren) ohne zu meckern an, jedoch könnten dadurch vielleicht trotzdem irgendwelche unentdeckten Fehler (es ist die Sprachdatei, welche nicht nur "Aktivieren", sondern auch HTML etc. beinhaltet) entstanden sein.

Danke für die Antwort im Voraus.

Jan Krüger
30.05.2005, 09:55
Der erste reguläre Ausdruck, den ich dir gegeben habe, funktioniert sehr wohl exakt deinen Bedingungen entsprechend: der Text "Link 1 von 9" in deinem Beispiel ist schließlich zwischen > und > eingeschlossen; da macht auch das < dazwischen keinen Unterschied. Funktioniert der zweite Ausdruck auch nicht?

Es ist generell leichter, für solche Geschichten einen XML-Parser zu benutzen.

CDATA-Blöcke sind für reinen Text nicht erforderlich; alles etwas Kompliziertere (insbesondere HTML-Tags, die die DTD für das XML-Dokument nicht vorsieht) sollte dann allerdings geCDATAt werden.

renet
30.05.2005, 14:02
Nein, "Link 1 von 9" ist nicht zwischen > und > sondern zwischen > und <. Ich möchte nur, dass er mir Sachen innerhalb der Tags selbst findet, also z.b. <a hr3f="...">, weil da eine "3" enthalten ist. Jedoch soll er nicht Sachen wie <a href="bla">t3xt</a> finden weil da in den Tags selbst keine Zahl vorkommt, sondern nur zwischen den Tags. Was zwischen bzw. außerhalb der Tags steht, soll aber ignoriert werden.

Okay, das Programm mit dem ich die XML Datei bearbeite heißt "XMLmind XML Editor" und das hat zwar die CDATA-Blöcke weg gemacht, jedoch hat es mir z.B. <a> (welches davor innerhalb der CDATA-Blöcke war) in &lt;a&gt; umgewandelt, oder etwa ...register.php?a=act&u=$userid in register.php?a=act&amp;u=$userid somit sollte das kein Problem darstellen, oder? Wenn ich die .xml Datei in das Programm lade, interpretiert er mir das jedoch wieder zurück, sodass ich dort wieder <a> usw sehen kann...

Thanks in advance for your answer.

Jan Krüger
30.05.2005, 16:09
Merkwürdiges Programm. Lass dir die Datei doch mal von einem anderen Programm (z.B. Mozilla Firefox) interpretieren, dann kriegst du eventuelle Fehlermeldungen angezeigt.
Das Ganze hängt vom DTD ab -- wenn da die Entities &lt; und &gt; nicht definiert sind, ist das, was der Editor da macht, ungültig.

Was den ersten Teil angeht, "Link 1 von 9" steht sehr wohl zwischen > und >. Dass da noch ein < dazwischen ist, ändert an dieser Tatsache nichts. Eine solche Unterscheidung ist nur sehr umständlich möglich, deshalb ja die Frage, ob der zweite Ausdruck funktioniert hat... der sollte für XML nämlich im Allgemeinen funktionieren.

renet
30.05.2005, 18:09
Ich weiß nicht, warum du mein Programm komisch findest, aber ich kann dir sagen, dass es kein normaler Quelltext Editor ist, sondern dass es die ganzen Sachen einteilt und interpretiert und als Stammbaum entsprechend untereinander anzeigt... Wie mir jetzt aufgefallen ist, funktioniert dein 2. Ausdruck wunderbar, auch wenn er davor irgendwie nicht funktioniert hatte. Naja, whatever. Aber vielen Dank für deine Hilfe. :)

Edit: Ich habe jetzt doch festgestellt, dass dadurch, dass die CDATA-Blöcke fehlen, das Forum nicht mehr so funktioniert, wie es denn soll. Zumindest dadurch, dass die XML-Datei sonst noch irgendwie verändert wurde von dem Programm das ich verwende. -.- Wenn ich die Sprachdatei auf dem Forum downloade (im AdminCP), hat er mir zwar die CDATA-Blöcke wieder eingefügt und es ist bspw. auch wieder <a> zu sehen anstatt &lt;a&gt;, wenn ich die Sprache jedoch jetzt durch diese downgeloadede Datei erneut installiere, funktionieren die Sachen immer noch nicht die auch davor nicht funktioniert haben. Kann das daran liegen, dass das Forum die CDATA-Blöcke irgendwie falsch wieder einfügt, bzw ohne etwas bestimmtes zu berücksichtigen? Und wäre es somit möglich, wenn ich die CDATA-Blöcke manuell wieder einfügen würde, dass das dann klappt?

Edit2: Yay! *freu* Hab das Hinderniss gefunden: Mein Programm hat ab einer bestimmten Zeilenlänge einfach einen Zeilenumbruch eingefügt und das hat das Forum gar nicht gemocht. Habe das in den Einstellungen geändert und jetzt funktioniert soweit alles. Hat sich somit erledigt. ^^