使用正则表达式

时间:2015-06-24 08:59:36

标签: php regex

出于某种原因,以下正则表达式的行为并不像我期望的那样。

我正在尝试从html广告素材中提取所有链接,但我似乎找不到合适处理空格链接的方法。

我知道链接应该被编码,但是如果我找不到它们就没有办法对链接进行编码。

我正在测试这个HTML - 请注意,唯一的区别是{your reference}中的空格。

Find out <a href="http://website.co.uk?element=1&amp;reference={your reference}"><span style="color:#000000;">what something is here</span></a><span style="color:#000000;">.</span><br />

Find out <a href="http://website.co.uk?element=1&amp;reference={yourreference}"><span style="color:#000000;">what something is here</span></a><span style="color:#000000;">.</span><br />

使用以下正则表达式,我只能获得没有任何空格的链接:

href="http(s{0,1}):\/\/(\S+)"

找到:

href="http://website.co.uk?element=1&amp;reference={yourreference}"

但是,如果我将\ S更改为a。我希望检查将链接返回到结束“,但它几乎持续到字符串的结尾:

href="http(s{0,1}):\/\/(.+)"

找到:

href="http://website.co.uk?element=1&amp;reference={your reference}"><span style="color:#000000;">what something is here</span></a><span style="color:#000000;"

href="http://website.co.uk?element=1&amp;reference={yourreference}"><span style="color:#000000;">what something is here</span></a><span style="color:#000000;"

我还有许多不同的检查来获取不同的链接,最终看起来像这样:

(href="|href=\')%%siteurl%%(\S*)("|\')
|href="www\.(\S+)"
|href="http(s{0,1}):\/\/(\S+)"
|href=\'www\.(\S+)\'
|href=\'http(s{0,1}):\/\/(\S+)\'

我不是在寻找这套装置的帮助,只是发布了原始的正则表达式,我会相应调整其余部分。

1 个答案:

答案 0 :(得分:1)

href="http(s{0,1}):\/\/(.+?)"

                          ^^

让你的quantifier非贪婪。