2

私はこのようなページのコンテンツを取得します:

$html = file_get_contents('example.ir');

$html内の href タグを取得したいのですが、カスタム url + stringである必要があります。

たとえば、私は 3 つの href を持っています:

1- href="http://example.ir/salam/ali/...."  => http://example.ir/ + salam/ali/....
2- href="http://example.ir/?id=123/..."     => http://example.ir/ + ?id=123/...
3- href="?kambiz=khare/..."                 => ?kambiz=khare/...

http://example.ir + some stringがあるため、番号 1 と 2 が必要です。

結果は次のようになります。

1- http://example.ir/salam/ali/....
2- http://example.ir/?id=123/...

助けてください:)

4

1 に答える 1

2

説明

この正規表現は、値が で始まる href 属性を持っているアンカー タグをキャプチャしますhttp://example.ir/。次に、href 値全体をキャプチャ グループ 1 にキャプチャします。

<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\shref="(http:\/\/example\.ir\/[^"]*))  # get the href attribute
(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?> # get the entire  tag
.*?<\/a>

ここに画像の説明を入力

サンプルテキスト

最後の行には、潜在的に困難なエッジ ケースがあることに注意してください。

<a href="http://example.ir/salam/ali/....">salam ali</a>
<a class="Fonzie" href="http://example.ir/?id=123/...">plus id 123</a>
<a class="Fonzie" href="?kambiz=khare/...">not an http</a>
<a onmouseover=' href="http://example.ir/salam/ali/...." ; funHrefRotater(href) ; " href="?kambiz=khare/...">again not the line we are looking for</a>

コード

この PHP の例は、一致がどのように機能するかを示すためのものです。

<?php
$sourcestring="your source string";
preg_match_all('/<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"][^\s>]*)*?\shref="(http:\/\/example\.ir\/[^"]*)) # get the href attribute
(?:[^>=]|=\'[^\']*\'|="[^"]*"|=[^\'"\s]*)*"\s?> # get the entire tag
.*?<\/a>/imx',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
 

マッチ

[0][0] = <a href="http://example.ir/salam/ali/....">salam ali</a>
[0][1] = http://example.ir/salam/ali/....
[1][0] = <a class="Fonzie" href="http://example.ir/?id=123/...">plus id 123</a>
[1][1] = http://example.ir/?id=123/...
于 2013-07-08T14:34:41.713 に答える