2009-03-22 7 views
0

class = "blah user_foo"だったHTMLのdivを持っていたら、Match()正規表現は 'foo'ビットを取得するのですか?Regex help

+0

@givp:私はGumboの答えを私の代わりに受け入れるでしょう... –

答えて

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

上記の空白を処理します。クラス仕様の前に他のものを追加することができます。

class='single-quoted-something'を処理しません。あなたは逆参照でそれを行うことができます。不正な形式のHTMLも処理しません。

2

class属性が欲しかったdiv要素とclass値の唯一の属性は、常にこのような構造(blahを固定し、その後user_foobar)がされている場合は、この正規表現を使用できます。

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

それ以外の場合は、この正規表現を試してください:

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

(?:[^>"']+|"[^"]*"|'[^']*')*では、属性値としてプレーン>が許可されていることも考慮しています。

編集バックトラックを低減するための先読みアサーションと最適化された正規表現:

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

私は言語がマッチ()を使用していますかわからないんだけど、それはおそらくこのようなものになります:$ 1または

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

言語によっては、「foo」で\ 1に格納されてもよいし、あるいは何か完全に。

+0

属性値には、平文の '> '文字を含めることができます。 – Gumbo

+0

私はあなたのポイントを参照してください。あなたのソリューションはこの問題に対処します。私はそれを投票します。 – Stephan202