修改正则表达式

时间:2015-07-09 08:58:21

标签: javascript php regex

我需要帮助修改以下正则表达式:

/(<a[^<>]*\shref=[\"\'])([^#][^<\"\'>]+)([\"\'][^<>]*)(.*?<\/a>)/is

使用此正则表达式,我能够提取href属性的内容,例如使用字符串:

<a href="http://www.google.com">Google</a>

它将提取http://www.google.com和所有其他内容。如果它包含#字符,我也在正则表达式中包含忽略href,这是因为我只对相对和绝对链接感兴趣。但是,我遇到了像<a href="/">Text</a>这样的锚点。出于某种原因,“/”字符将不匹配,我需要解决这个问题。这是演示http://regexr.com/3bbul

2 个答案:

答案 0 :(得分:0)

您需要添加否定前瞻。

(<a[^<>]*\shref=[\"\'])(?!#)([^<\"\'>]+)([\"\'][^<>]*)(.*?<\/a>)

(<a[^<>]*\shref=([\"\']))(?!#)([^<\"\'>]+)(\2[^<>]*)(.*?<\/a>)

你的正则表达式出了什么问题?

([^#][^<\"\'>]+)

[^#]匹配单个chracater。

[^<\"\'>]+匹配catleast one char。

因此,除了href内的至少两个字符外,输入中的href属性值仅包含单个字符。所以没有比赛。

DEMO

答案 1 :(得分:0)

最好使用此正则表达式

/<a.*href="([^#]*)">.*<\/a>/is

enter image description here