免责声明:我知道html和正则表达式不应该站在一起,但这是一个例外情况。
我需要解析Google搜索结果并提取缓存网址。我在页面中有这个:
<a href="/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:
gsNKb7ku3ewJ:somedata&ei=MyIIUtrZAcPX7AaVzIHwDg&ved=0CB8QIDAC&usg
=AFQjCNGcnWfdzQiTKwyAMmI-M-xzxII5Ag">Cached</a>
我尝试过简单的东西:href=[\'"]?([^\'" >]+)
,但这不是我需要的东西。我想从 href 中提取单个参数( q )。我需要得到:
http://webcache.googleusercontent.com/search%3Fq%3Dcache:gsNKb7ku3ewJ:somedata
当“url?q =”和第一个“&amp;”之间的所有内容时,内容中包含单词“webcache”。
答案 0 :(得分:1)
使用之前的介绍,并在结尾处向前看以断言周围的文本,并在正则表达式中包含关键字:
(?<=url\?q=)[^&]*webcache[^&]*(?=&)
使用[^&]*
可确保关键字出现在&amp; - 在目标字符串中。
答案 1 :(得分:1)
如果您的语言支持积极的观察:
(?<=q=).*?(?=[&"])
否则将组\1
与此表达式匹配:
(?:q=)(.*?)(?=[&"])
说明:
.*?
是我们表达的主体。只是匹配一切,但不要贪心! (?<=q=)
是一个积极的后卫,在比赛前说“q =”应该来了(?=[&"])
是一个积极的向前看,其中说“在比赛结束之后,应该和/或引用”因为我们对?
不贪心,所以它会在第一个引号或符号处停止。否则它会一直匹配收盘价。