私はphpを使用していますが、アンカータグからhrefをテキストで解析するのに問題があります。
例: test を持つアンカータグhttp://www.test.com
このような<a href="http://www.test.com" title="test">http://www.test.com</a>
アンカータグ内のすべてのテキストに一致させたい
前もって感謝します。
私はphpを使用していますが、アンカータグからhrefをテキストで解析するのに問題があります。
例: test を持つアンカータグhttp://www.test.com
このような<a href="http://www.test.com" title="test">http://www.test.com</a>
アンカータグ内のすべてのテキストに一致させたい
前もって感謝します。
DOMを使用します。
$text = '<a href="http://www.test.com" title="test">http://www.test.com</a> something else hello world';
$dom = new DOMDocument();
$dom->loadHTML($text);
foreach ($dom->getElementsByTagName('a') as $a) {
echo $a->textContent;
}
DOM は、特に XML と HTML を解析するように設計されています。これは、思いつくどの正規表現ソリューションよりも堅牢です。
そのhrefを使用してアンカーリンクのリンクテキストを選択したい場合、次のようなものが機能するはずです...
$input = '<a href="http://www.test.com" title="test">http://www.test.com</a>';
$pattern = '#<a href="http://www\.test\.com"[^>]*>(.*?)</a>#';
if (preg_match($pattern, $input, $out)) {
echo $out[1];
}
これは技術的には完全ではありませんが (理論的には > タグの 1 つでおそらく使用できます)、99% のケースで機能します。ただし、いくつかのコメントで言及されているように、DOM を使用する必要があります。
アンカー タグを既に取得している場合は、正規表現を介して簡単に href 属性を抽出できます。
<a [^>]*href="([^"])"[^>]*>
代わりにタグの内容を抽出したいが、何をしているのかを知っている場合は、カスケード正規表現を使用して単純な再帰降下パーサーを作成することはそれほど難しくありません。これは、最も病的なケースを除いてすべてを解析します。残念ながら、PHP はこれを行う方法を学ぶのに適した言語ではないため、このプロジェクトを使用して方法を学ぶことはお勧めしません。
したがって、属性ではなく、目的のコンテンツである場合、@katrielalex は正しいです。正規表現で HTML を解析しないでください。ネストされたフォーマット タグや、正規表現と互換性のないその他の正当な HTML を使用すると、苦痛の世界に遭遇することになります。