2009-03-22 11 views
0

Wenn ich ein div in HTML hatte, das class = "blah user_foo" hatte, was ist die Match() Regex, um das 'foo' Bit zu bekommen?Regex Hilfe

+0

@givp: Ich würde Gumbo's Antwort anstelle von mir akzeptieren ... –

Antwort

1
/<div\s(?:[^>'"]*|".*?"|'.*?')*?\bclass\s*=\s*"blah user_(.*?)"/i 

Die obigen Leerzeichen behandelt; und andere Dinge vor der Klassenspezifikation.

Es behandelt nicht den Fall, in dem class='single-quoted-something'; Sie könnten das mit einer Rückreferenz machen. Es verarbeitet auch nicht fehlerhaftes HTML.

2

Wenn das class Attribut das einzige Attribut der wollte div Elemente und der class Wert hat immer die erwähnten Struktur (feste blah und dann user_foobar), könnten Sie diesen regulären Ausdruck verwenden:

<div\s+class\s*=\s*"blah user_([^"\s]+) 

versuchen Sonst diesen regulären Ausdruck:

<div\s+(?:[^>"']+|"[^"]*"|'[^']*')*\bclass\s*=\s*"blah user_([^"\s]+) 

Der Ausdruck (?:[^>"']+|"[^"]*"|'[^']*')* berücksichtigt auch, dass als Attributwert eine Ebene > zulässig ist.

bearbeiten den regulären Ausdruck mit einem Vorgriff Behauptung Optimierte zu reduzieren Rückzieher:

<div\s+(?:(?:(?!class)[^>"']+(?:"[^"]*"|'[^']*')?)\s+)*class\s*=\s*"blah user_([^"\s]+) 
1

Ich bin nicht sicher, welche Sprache verwendet Match(), aber es wird wahrscheinlich so etwas wie folgt aussehen:

<div[^>]+class="blah user_([^"]+)" 

abhängig von der Sprache, ‚foo‘ kann in \ 1 oder $ 1 oder gespeichert werden etwas ganz anderes.

+0

Attributwerte können einfache '>' Zeichen enthalten. – Gumbo

+0

Ich verstehe deinen Standpunkt. Ihre Lösung löst dieses Problem. Ich werde es abstimmen. – Stephan202