使用了2個正則表達式庫,分別是QRegExp、pcre和pcre++。正則表達式的寫法一般都是通用的,但對於貪婪匹配,不同的正則庫有些不同。 在pcre中,非貪婪模式是由'?'來指定的,但在QRegExp中,存在'?',為不合法的正則表達式,在QRegExp中,要使用setMinimal函數來指定貪婪算法。setMinimal函數的意思是設置最小匹配,也就是非貪婪。 1.例子: 從html代碼中抓取隱藏域 內容: [html] <form method="post" name="" id="loginFormQiye" target="_top" style="display:none;" action=""> <input type="hidden" name="account_name" id="txtUserNameqiye" value="" /> <input type="hidden" name="domain" id="txtUserDomainqiye" value="" /> <input type="hidden" name="password" id="txtPasswordqiye" value="" /> <input type="hidden" id="qiyeall_secure" name="all_secure" value="1"/> <input type="aaa" id="aaa" name="aaa" value="1"/> <input type="abc" id="abc" name="abc" value="1"/> <input type="hidden" id="test" name="test" value="1"/> </form> <form method="post" name="" id="loginFormQiye" target="_top" style="display:none;" action=""> <input type="hidden" name="account_name" id="txtUserNameqiye" value="" /> <input type="hidden" name="domain" id="txtUserDomainqiye" value="" /> <input type="hidden" name="password" id="txtPasswordqiye" value="" /> <input type="hidden" id="qiyeall_secure" name="all_secure" value="1"/> <input type="aaa" id="aaa" name="aaa" value="1"/> <input type="abc" id="abc" name="abc" value="1"/> <input type="hidden" id="test" name="test" value="1"/> </form> 正則表達式: <input.*type=["]hidden(.*)/> ps:如果要在代碼裡面寫,'"'要用斜槓轉義,變成:<input.*type=[\"]hidden(.*)/> 匹配結果: (1).要最小化匹配->非貪婪 setMinimal(true) 匹配結果: [html] " name="account_name" id="txtUserNameqiye" value="" " name="domain" id="txtUserDomainqiye" value="" " name="password" id="txtPasswordqiye" value="" " id="qiyeall_secure" name="all_secure" value="1" " id="test" name="test" value="1" " name="account_name" id="txtUserNameqiye" value="" " name="domain" id="txtUserDomainqiye" value="" " name="password" id="txtPasswordqiye" value="" " id="qiyeall_secure" name="all_secure" value="1" " id="test" name="test" value="1" (2).要最大化匹配->貪婪 setMinimal(false) 匹配結果: [html] " name="account_name" id="txtUserNameqiye" value="" /> <input type="hidden" name="domain" id="txtUserDomainqiye" value="" /> <input type="hidden" name="password" id="txtPasswordqiye" value="" /> <input type="hidden" id="qiyeall_secure" name="all_secure" value="1"/> <input type="aaa" id="aaa" name="aaa" value="1"/> <input type="abc" id="abc" name="abc" value="1"/> <input type="hidden" id="test" name="test" value="1" " name="account_name" id="txtUserNameqiye" value="" /> <input type="hidden" name="domain" id="txtUserDomainqiye" value="" /> <input type="hidden" name="password" id="txtPasswordqiye" value="" /> <input type="hidden" id="qiyeall_secure" name="all_secure" value="1"/> <input type="aaa" id="aaa" name="aaa" value="1"/> <input type="abc" id="abc" name="abc" value="1"/> <input type="hidden" id="test" name="test" value="1" 貪婪模式下,直接匹配到最後一次出現"/>"的位置 非貪婪模式下,每次遇到"/>"完成一次匹配 2.在上面的例子中,如果要在pcre庫中實現同樣的功能,正則表達式是:<input.*?type=[\"]?hidden(.*)?/>