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意味ではありません。しかし、^有効ではありません。では、どの構文が空でないことを意味するのでしょうか?

注:aタグには他の属性が含まれている可能性があることを認識しています。

4

4 に答える 4

1

必要なのはとても簡単です。

はい、そうです。本当に必要なのはXPathです。

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

本当に正規表現でこれを解決したい場合は、これを使用できます:

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

href="..."これは、少なくとも1文字の長さで、空白を含まない属性内のすべてに一致します。

<a>...</a>また、少なくとも1つの非空白文字で構成されるタグ間のすべてに一致します。

空白を含むURLを許可する場合、この正規表現は機能します。

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

ただし、代わりにパーサーとXPathなどのクエリ言語を使用することを検討してください(ここで提案されています)。

于 2013-01-23T13:13:07.383 に答える
0

これを試して:

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

あなたが使うことができます

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

\s*\S[^<]*<は、空白以外の文字が1つ続くまで空白を何度も一致させ、その後に。<が続くまで空白以外の文字が続くことを意味し<ます。

もちろん、<タグの間にある場合、これは失敗する可能性があります。

于 2013-01-23T14:44:10.170 に答える