複数行の入力で失敗する理由は.
、デフォルトではドット ( ) が改行文字と一致しないためです。正規表現の前に追加してシングルラインモードにすることで修正できます(ドットが改行を含む(?s)
すべてに一致するようになるため、一部のフレーバーではDOTALLモードとも呼ばれます)。
他のレスポンダーが言及した複数行モードは、おそらくあなたのケースには関係ありません。これが行うことは、^
および$
アンカーが個々の行の先頭と末尾、および文字列全体の先頭と末尾に一致できるようにすることです。
あなたはこれを ASP.NET RegularExpressionValidator で使用していると言いましたが、これは別の潜在的な問題を引き起こします。バリデーターがサーバーだけでなくクライアント側でも検証を行うように設定されている場合、.NET ではなく、JavaScript 正規表現フレーバーが機能します。JavaScript は Singleline/DOTALL モードをサポートしていないため、正規表現のドットをすべての文字に一致する別のものに置き換える必要があります。ほとんどの人が使用します([\s\S]
空白文字または空白文字以外の任意の文字)。
引用された属性値のより堅牢なイディオムを含む結果の正規表現を次に示します。
^(?:(?!<\w+(?:\s+\w+\s*\=\s*(['"])(?:(?!\1).)*\1)*\s*>)[\s\S])*$