1

我需要的很简单。如果链接或单词为空或空格,则不匹配。

<a href="link">anything</a> - match
<a href="">anything</a>     - not match
<a href="link"></a>         - not match
<a href=" ">anything</a>    - not match
<a href="link"> </a>        - not match
<a href=" "> </a>           - not match
<a href=""> </a>            - not match
<a href=" "></a>            - not match
<a href=""></a>             - not match

我首先尝试了什么;

<a href="(.*?)">(.*?)</a>

我知道^a意思不是。但只是^无效。那么什么语法意味着NOT EMPTY?

注意:我知道a标签中可能还有其他属性。

4

4 回答 4

1

我需要的很简单。

是的,您真正需要的是 XPath:

//a[normalize-space(@href) != ""]
于 2013-01-23T12:52:49.503 回答
1

如果你真的想用正则表达式解决这个问题,你可以使用这个:

/<a href="[^\s"]+">[^<]*[^<\s][^<]*<\/a>/

这匹配href="..."属性中至少一个字符长且不包含空格的所有内容。

它还匹配<a>...</a>包含至少一个非空白字符的标签之间的所有内容。

如果您想允许包含空格的网址,则此正则表达式有效:

/<a href="[^"]*[^\s"]+[^"]*">[^<]*[^<\s][^<]*<\/a>/

但是,请考虑改用解析器和查询语言(如 XPath)(如此处建议的那样

于 2013-01-23T13:13:07.383 回答
0

你可以使用

 /<a href="\s*\S[^"]*">\s*\S[^<]*<\/a>/

\s*\S[^<]*<表示不匹配空格或多次匹配空格,直到后跟一个非空格字符,后跟任何不是<零或多次的字符,直到后面跟着<.

当然,如果<标签之间有,这可能会失败。

于 2013-01-23T14:44:10.170 回答
0

尝试这个:

<a href="[^"\s]+"[^>]*>[^<\s]+</a>
于 2013-01-23T13:15:48.163 回答