匹配Google Cache网址的正则表达式(当包含单词时匹配整个href参数)

时间:2013-08-12 00:11:30

标签: html regex

免责声明:我知道html和正则表达式不应该站在一起,但这是一个例外情况。

我需要解析Google搜索结果并提取缓存网址。我在页面中有这个:

<a href="/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:
gsNKb7ku3ewJ:somedata&ei=MyIIUtrZAcPX7AaVzIHwDg&amp;ved=0CB8QIDAC&amp;usg
=AFQjCNGcnWfdzQiTKwyAMmI-M-xzxII5Ag">Cached</a>

我尝试过简单的东西:href=[\'"]?([^\'" >]+),但这不是我需要的东西。我想从 href 中提取单个参数( q )。我需要得到:

http://webcache.googleusercontent.com/search%3Fq%3Dcache:gsNKb7ku3ewJ:somedata

当“url?q =”和第一个“&amp;”之间的所有内容时,内容中包含单词“webcache”。

2 个答案:

答案 0 :(得分:1)

使用之前的介绍,并在结尾处向前看以断言周围的文本,并在正则表达式中包含关键字:

(?<=url\?q=)[^&]*webcache[^&]*(?=&)

使用[^&]*可确保关键字出现在&amp; - 在目标字符串中。

答案 1 :(得分:1)

如果您的语言支持积极的观察:

(?<=q=).*?(?=[&"])

否则将组\1与此表达式匹配:

(?:q=)(.*?)(?=[&"])

说明:

  • .*?是我们表达的主体。只是匹配一切,但不要贪心!
  • (?<=q=)是一个积极的后卫,在比赛前说“q =”应该来了
  • (?=[&"])是一个积极的向前看,其中说“在比赛结束之后,应该和/或引用”

因为我们对?不贪心,所以它会在第一个引号或符号处停止。否则它会一直匹配收盘价。