设为首页 加入收藏

TOP

Qt正则表达式的贪婪模式
2013-01-25 17:52:07 来源: 作者: 【 】 浏览:645
Tags:正则 表达式 贪婪 模式

  使用了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)

[NextPage]

 

  匹配结果:

  [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(。*)?/>

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇字符型数组在内存中的存储 下一篇C++结构体占内存大小的判断

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: