1

rel="external nofollow" の場合にのみタグ a href から正規表現を抽出するのを手伝ってください

<a href="text.html" rel="external nofollow">text1:text2:text3/</a>

結果としてのみ必要

text1:text2:text3

それから試してみる

$regexp = '<a (?![^>]*?rel="external nofollow")[^>]*?href="(.*?)"';

エラーが発生します

Warning: preg_match() [function.preg-match]: Unknown modifier ']' in /
4

4 に答える 4

3

HTML を解析するこの種のタスクに正規表現を使用しないことを強くお勧めします。HTML はさまざまに変化する可能性があり、予期しない結果が生じる可能性があります。

DOM parser in PHP次のコードのように使用することを検討してください。

$html = '<a href="found.html" rel="external nofollow">text1:text2:text3/</a>
         <a href="notfound.html" rel="external">text11/</a>';
$doc = new DOMDocument();
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//a[contains(@rel, 'external nofollow')]");
for($i=0; $i < $nodelist->length; $i++) {
   $node = $nodelist->item($i);
   echo $node->getAttribute('href') . "\n";
}

出力:

found.html
于 2013-09-30T15:46:49.083 に答える
1

試す

preg_match('/<a.*rel="external nofollow"[^>]*>([^<]*)</a>/i',
           $string_to_search_through, $res);
echo $res[1];

$res[1]ご希望のテキストをお届けします。

于 2013-09-30T15:18:34.983 に答える
0

まず、正規表現の周りに適切な区切り文字を取得する必要があります。適切なものは次の~とおりです。

$regexp = '~<a (?![^>]*?rel="external nofollow")[^>]*?href="(.*?)"~';

第二に、この正規表現は、アンカータグとキャプチャリンクの間のすべてに一致し、アンカータグにhrefない場合にのみ、rel="external nofollow"あなたがやろうとしていることとは反対だと思いました。否定先読みは一致を防ぎます。その正規表現を次のように完全に変更したい場合があります。

$regexp = '~<a[^>]*?rel="external nofollow"[^>]*>(.*?)</a>~';

その代わり。

正規表現101のデモ

于 2013-09-30T15:24:40.180 に答える