2012-05-01 26 views
0

正規表現私は正規表現次ているのマッチングhtmlタグ

^(?:(?!<(\w+)(\s+(\w+)\s*\=\s*(\'|")(.*?)\\4\s*)*\s*>).)*$ 

そして、私は正規表現のようなものと一致する必要がありますので、ユーザーがJavaScriptコードを入力することができますテキストボックスがあります。

if (i <html> 0) || (j > 10) 

をし、それが単一のためだけでなく、動作しますマルチラインで動作する必要があります。

btw http://regexpal.com/

+0

あなたは正規表現を実行するために使用していますか?これはコマンドラインのツール/スクリプトですか?これはコードですか?いくつかの正規表現ツールは複数の行にマッチしません。 – Rob

+0

aspで使用する:RegularExpressionValidator – aishlin

+0

あなたが上記の場合に望ましいマッチは何ですか?その場合に複数の行と希望する一致があるケースを与えることもできます。 – Rob

答えて

0

:私は、このページに正規表現をテストします照合のためにmulti-lineあなたの質問にはあなたが使っているエンジンは言及されていないので、それをさらに助けることは容易ではありません。

0

すべて正規表現エンジンがオプションを持っている:

あなたはそれがここに動作することをテストすることができます。それはあなたがあなたの正規表現でm個の複数行修飾子はよJavaScriptのならhttp://www.zytrax.com/tech/web/regex.htm#experiment

1

マルチライン入力に失敗した理由は、デフォルトではドット(.)が改行文字と一致しないためです。正規表現の先頭に(?s)を追加することで修正できます。ドットをすべて改行を含む)と一致するようにするために、正規表現の前に追加することで修正できます(一部のフレーバではDOTALLモードとも呼ばれます)。

他のレスポンダによって言及されたマルチラインモードは、おそらくあなたのケースに関係しません。それがするのは、^$のアンカーが、個々の行の始めと終わり、そして文字列全体の始めと終わりと一致することです。

あなたは、ASP.NETのRegularExpressionValidatorでこれを使用していて、別の潜在的な問題を引き起こしていると言いました。バリデーターがクライアント側とサーバー側でバリデーションを行うように設定されている場合、.NETではなくJavaScript regexフレーバーになります。 JavaScriptはSingleline/DOTALLモードをサポートしていないので、正規表現のドットをすべての文字に一致するものに置き換える必要があります。ほとんどの人は[\s\S]を使用します(空白文字またはではなく、の空白です)。

は、ここで引用された属性値のためのより強固なイディオムを含めた正規表現、です:

^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$