我需要帮助修改以下正则表达式:
/(<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
答案 0 :(得分:0)
您需要添加否定前瞻。
(<a[^<>]*\shref=[\"\'])(?!#)([^<\"\'>]+)([\"\'][^<>]*)(.*?<\/a>)
或
(<a[^<>]*\shref=([\"\']))(?!#)([^<\"\'>]+)(\2[^<>]*)(.*?<\/a>)
你的正则表达式出了什么问题?
([^#][^<\"\'>]+)
[^#]
匹配单个chracater。
[^<\"\'>]+
匹配catleast one char。
因此,除了href
内的至少两个字符外,输入中的href属性值仅包含单个字符。所以没有比赛。
答案 1 :(得分:0)
最好使用此正则表达式
/<a.*href="([^#]*)">.*<\/a>/is