私は正規表現を使用しません。 HTMLパーサーを使用して正確なHREFを取得し、URLパーサーを使用してフラグメントを取得することができます。
$string = '<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>';
$doc = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
$doc->LoadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $doc->getElementsByTagName('a');
foreach($links as $link){
if(strpos($link->nodeValue, 'name1') !== FALSE) {
$href = $link->getAttribute('href');
$url_bits = parse_url($href);
echo $url_bits['fragment'];
}
}
デモ:何らかの理由でURLパーサが動作していない場合https://3v4l.org/DNdE5
はあなたがここに$href
に、正規表現を使用して爆発、またはpreg_splitことができます。正規表現のアプローチは次のようになります。
$string = '<a href="page1.html#num0035583725">name1</a>
<a href="page30.html#num0035584494">othername</a>
<a href="page55.html#num0035584859">word</a>
<a href="page132.html#num0035585496">wordname</a>
<a href="page133.html#num0035586039">datadata</a>
<a href="page203.html#num0035586647">fsdfasfas</a>';
$doc = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
$doc->LoadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $doc->getElementsByTagName('a');
foreach($links as $link){
if(strpos($link->nodeValue, 'name1') !== FALSE) {
$href = $link->getAttribute('href');
preg_match('/#\K.+/', $href, $fragment);
echo $fragment[0];
}
}
デモ:あなたの助けをhttps://3v4l.org/F5LND
感謝。 しかし、name1の行だけを取得するにはどうすればよいですか? –
私の答えがあなたの質問に合っていればそれを受け入れてください。 – pr1nc3
申し訳ありません。私は文章を終える前に誤って入力した。 –