Archiv verlassen und diese Seite im Standarddesign anzeigen : nicht CDATA am Anfang ..
Moin Moin,
Ich habe in einem XML-String Knoten mit CDATA-Tags, und ebenso welche ohne.
<infotext><![CDATA[<c_data>Text</c_cdata>]]></infotext>
<infotext><c_data>Text</c_cdata></infotext>
Jetzt bin ich auf der Suche nach einem Ausdruck, der mir alle Textbereiche rausfiltert, die zwar ein <c_data>Text</c_data> enthalten, aber am Anfang kein <![CDATA[ haben.
Bisher habe ich folgendes zustande gebracht:
[^<!\[CDATA\[]<c_data>(.)*<\/c_data>
Doch leider matcht er mir das ganze nicht so, wie ich das gerne hätte.
Kann mir diesbezüglich jemand helfen?
MfG
vase2k :):)
Jan Krüger
24.04.2009, 02:37
Welcher regex-Dialekt? Falls PCRE (z.B. PHP), schau dir mal das Stichwort Negative Lookbehind Assertion an.
Manni the Dark
24.04.2009, 21:39
Da bekommst du mit ner RegExp nicht hin. Du könntest höchstens alles, was in einem CDATA drinsteht rauslöschen und dann die erstlichen Vorkommen finden.
Ansonsten benutz halt nen XML Parser (das ist für die Verarbeitung von XML sowieso am sinnvollsten) oder bastel dir deinen eigenen kleinen Parser. Du brauchst schon einen Endlichen Automaten (http://de.wikipedia.org/wiki/Endlicher_Automat) für diesen Fall.
Ein endlicher Automat ist gleichmächtig zu einem Regulärem Ausdruck, du meinst einen Kellerautomat. Dinge wie Negative Lookbehind Assertions sind allerdings Erweiterungen zu regulären Ausdrücken und mit diesen sind teilweise nichtmehr reguläre Sprachen ausdrückbar und somit manchmal möglich Konstrukte zu erfassen bei denen man normalerweise sagen würde:"mit Regex geht das so nicht". Aber ja am sinnigsten ist es meistens einen richtigen Parser zu verwenden.
Manni the Dark
25.04.2009, 10:41
Stimmt, da hab ich was verwechselt. Aber selbst mit Lookaheads/Lookbehinds kann man XML nicht vernünftig verarbeiten. Zumal viele Sprachen diese auch nur mit einer festen Breite erlauben (Also kein .* oder ähnliches).
Ja, in Sonderfällen mag es möglich sein zu erreichen was man will meistens taugt es jedoch einfach nicht und man wünscht man hätte gleich einen richtigen Parser verwendet, zumal die ganzen backtracking Geschichten mit den Assertions die Regex wirklich sehr langsam werden lassen können.
(Heißt ich habe nichtmal mehr wirklich einen Geschwindigkeitsvorteil der Regex gegenüber einem Parser)
eViL_oNe
27.04.2009, 01:40
kann mir jemand den Gefallen tun und einen Sticky-Thread erstellen, dass man XML NICHT mit Regex parsen sollte? *g*
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.