0

次のコードがあります。「a」タグ内のすべてを取得しようとしています。現時点では動作しています。出力として「first」と「second」を取得しています。開始 "a" タグと終了 "a" タグは同じ行にあります。

$v = 'this is test 
<a href="products.html">first</a> 
<a>second</a;
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo);
echo implode("\n", $foo[1]);

しかし、次のように書くと、

$v = '<a href="products.html">first
</a> 
preg_match_all("#<a\b[^>]*>(.*?)</a>#", $v, $foo);
echo implode("\n", $foo[1])';

ここで、「a」タグを 2 行目に移動しましたが、出力が得られません。誰かがそれを機能させる方法を知っていますか?

4

1 に答える 1

1

発生している問題については、単一行オプションを有効にする必要があるためです ( s):

preg_match_all("#<a\b[^>]*>(.*?)</a>#s", $v, $foo);

それ以外の場合.は改行と一致しません。

ドキュメントからのオプションの説明:

この修飾子が設定されている場合、パターン内のドット メタ文字は、改行を含むすべての文字に一致します。それがない場合、改行は除外されます。

ただし、おそらく正規表現を使用しない方がよいでしょう。 PHP の他のアプローチについては、この質問を参照してください

于 2013-02-20T14:17:07.363 に答える