2009-05-26 3 views
0

Ich habe den folgenden regulären Ausdruck von diesem Beitrag (Regular expression for extracting tag attributes).Wie kann ich den TAG-Namen und Attribute UND Werte dieser Attribute mit einem regulären Ausdruck auswählen?

(\S+)=["\']?((?:.(?!["\']?\s+(?:\S+)=|[>"\']))+.)["\']? 

Ich habe den folgenden PHP-Code erstellt und es funktioniert gut. Ich bekomme [id = 'gridview1' und 'id' und 'gridview1'] von der Funktion preg_match_all().

$regexp = '/(\S+)=["\']?((?:.(?!["\']?\s+(?:\S+)=|[>"\']))+.)["\']?/'; 
$text = '<asp:gridview id=\'gridview1\' />'; 

$matches = null; 
preg_match_all($regexp, $text, $matches); 

print_r($matches); 

Wie soll der reguläre Ausdruck auch ‚asp‘ und ‚gridview‘ geändert werden, zurückzukehren? (oder 'Foo' und 'Bar', wenn ich verwenden:

< Foo: Bar/>

+1

Bitte benutzen Sie statt regexp mit SimpleXML in Betracht ziehen? –

+1

"Manche Leute denken, wenn sie mit einem Problem konfrontiert werden:" Ich weiß, ich werde reguläre Ausdrücke verwenden. "Jetzt haben sie zwei Probleme." Wenn Sie mehr als die einfachste HTML-Analyse benötigen, verwenden Sie einen XML-Parser. –

+1

In der anderen Frage versuchten mehrere Leute Ihnen zu sagen, dass Sie nicht versuchen sollten, nicht reguläre Sprachen mit einem regulären Ausdruck zu analysieren. Warum benutzt du nicht einfach einen ihrer Vorschläge, wo alles, was du fragst, einfach wird? – Svante

Antwort

1

([a-zA-Z]+)\:([a-zA-Z]+) würde wie Foo etwas arbeiten: bar

<.*?([a-zA-Z])+.*?\:.*?([a-zA-Z])+.*?\/> funktionieren würde für < Foo: BArrr />

Die Dinge können je nach Ihren Anforderungen und whe optimiert werden Sie wissen, dass eine bestimmte Art von Formatierung erzwungen wird.

+0

Ich werde morgen versuchen zu sehen, ob du Recht hast ... Danach werde ich mit meinem XML-Parser arbeiten;) – Ropstah