2012-05-01 191 views
0

我有以下的正則表達式:正則表達式匹配HTML標記

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

而且我有文本框,在那裏用戶可以鍵入的JavaScript代碼,這樣的正則表達式應該匹配的東西,如:

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

,它僅適用,但對單但它必須適用於多行

btw。我這個頁面上測試正則表達式:http://www.zytrax.com/tech/web/regex.htm#experiment

+0

你在使用運行正則表達式?這是一個命令行工具/腳本還是代碼中?一些正則表達式工具在多行上不匹配。 – Rob

+0

在asp中使用:RegularExpressionValidator – aishlin

+0

在上面的情況下,期望的匹配是什麼?並且可以在這種情況下提供多行和所需匹配的案例。 – Rob

回答

0

如果它的JavaScript,你會在你的正則表達式m個多修改:

你可以測試它在這裏工作: http://regexpal.com/

0

所有的正則表達式引擎有一個選項匹配multi-line。既然你的問題沒有提到你正在使用哪種引擎,那麼要進一步幫助你並不容易。

1

它多輸入失敗的原因是因爲點(.)默認不匹配換行符。您可以通過添加(?s)的正則表達式來把它在單線模式的前修復(也稱爲DOTALL模式在一些味道,因爲它授權點匹配一切包括換行符)。

多行模式,這是由其他應答所提到的,可能是不相關的情況。它所做的是允許^$定位符匹配單個行的開始和結尾以及整個字符串的開始和結尾。

你說你在一個ASP.NET的RegularExpressionValidator,這帶來了另一個潛在的問題都用這個。如果驗證程序設置爲在客戶端以及服務器上進行驗證,則它將成爲執行此工作的JavaScript正則表達式,而不是.NET。 JavaScript不支持Singleline/DOTALL模式,所以你需要用其他匹配所有字符的東西替換正則表達式中的點;大多數人使用[\s\S](任何空格字符或而不是空格)。

這裏的正則表達式產生的,包括爲引號中的屬性值,一個更強大的成語:

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