2016-08-11 4 views
1

Ich bin die folgende RegEx mit einem String in Schlüssel und Werte zu teilen:RegEx Probleme mit doppelten Anführungszeichen

String:

type="post" id="1" text="Blog Post" 

Regex:

/(?<name>\\S+)=["']?(?P<value>(?:.(?!["']?\\s+(?:\\S+)=|[>"']))+.)["']?/u 

Das funktioniert, solange jeder Wert mindestens 2 Zeichen hat. I der Wert ist nur 1 Zeichen lang (wie ID hier) Ich bekomme ein Angebot nach der Nummer. So für dieses Beispiel mit dem ID bekomme ich folgende Ausgabe:

type => post 
id => 1" 
text => Blog Post 

Ive keine Ahnung, wo in der RegEx mein Fehler ist. Vielleicht kann mir jemand einen Hinweis geben?

Vielen Dank!

+0

Sieht ein bisschen so aus, als würden Sie Markup mit Regex parsen, was nie eine gute Idee ist. Sie benötigen einen DOM-Parser, um Markup zu konsumieren. –

+0

Nein, ich analysiere kein DOM. Ich suche nach Shortcodes (wie in Wordpress) in Text, um es zu verarbeiten. – Michael

Antwort

1

Ich denke, der letzte Punkt ist überflüssig. Könnten Sie dies versuchen:

/(?<name>\\S+)=["']?(?P<value>(?:.(?!["']?\\s+(?:\\S+)=|[>"']))+)["']?/u 

ich konw nicht, wie Sie diese Regex verwenden, aber ich denke, Sie können diese Option nutzen:

/(\w+)=["']?([^"']+)["']/ug 

Oder mir weitere Informationen zur Verfügung stellen.

+0

Hm .. Ich habe eine regex101-Seite erstellt, auf der Sie das Problem sehen können (Attribut "error"): https://regex101.com/r/yX2uW2/1 – Michael

Verwandte Themen