2

コンテンツの長さが30文字を超える特定のHTMLからすべてのアンカータグを取得しようとしています。つまり、このHTMLを持っている場合

<td><a hreh="anything">Content is more then 30 chars........</a>
<a hreh="anything">another link</a>
</td>

私はこれのためにこの正規表現を書きましたpreg_match_all("/<a href=\"(.*)\"[^>]*>([a-zA-Z0-9]{30,999})<\\/[a-zA-Z]+>/si", $match[0],$posts);

30 は、アンカー タグ コンテンツに最小 30 文字の制限を設定していますが、残念ながらこれは機能していません。

私が間違っていたことを指摘できる人なら誰でも。

ありがとう

注:このページのURLの このリンクを取得しようとしています

4

2 に答える 2

2

次のような簡単なものでしょうか

<a.*?>.{30,}?</a>

十分ではありませんか?上記は、コンテンツが 30 文字以上のアンカー タグを探します。href 属性やリンクのその他の属性の検証は試みません。これらが必要な場合は変更できます。

これは次のように翻訳さpreg_match_allれます (@php_nub_qq に感謝)

preg_match_all("#<a.*?>.{30,}?</a>#", $match[0],$posts);

リンクした URL には、文字、数字、および英数字以外の文字が URL 文字列に含まれています。ソースをほとんど制御できないため、文字ごとにホワイト リストを作成するよりも、上記のようにケースを一般化することをお勧めします。

于 2013-08-30T11:23:48.293 に答える
0

これを試して:

preg_match_all("/<a href=\"(.*)\"[^>]*>([a-z\d\s]{30,})<\\/[a-z]+>/si", $match[0],$posts);

大文字と小文字を区別しない修飾子があるため、クラスにとのi両方は必要ありません。また、コンテンツの最小の長さを設定するだけであれば、最大の長さを指定する必要はありません。30以上を意味します。a-zA-Z999{30,}

于 2013-08-30T11:21:41.650 に答える