1

preg_match を使用して、2 つの HTML タグの間のテキストを取得しようとしています。

これが私のコードの簡略版です:

 $sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
 $sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
 preg_match($sPattern,$sText,$aMatch);
 echo '<pre>'.print_r($aMatch).'</pre>';

ただし、このコードを実行すると、完全な HTML 文字列が返されます。

<li class=\"sample\">hello world!</li>

正規表現にどのような変更を加える必要があるか知っている人はいますか?

注: HTML ページからデータを解析する他の方法を知っています。さまざまな理由から、DOMDocument と DOMXPath はオプションではありません。私は RegEx を使い続けています。

4

2 に答える 2

6

これはあなたが望むように動作するはずです:

$sPattern = "/<li class=\"sample\">(.*?)<\/li>/s";
$sText = "blah blah blah <li class=\"sample\">hello world!</li> blah blah blah";
preg_match($sPattern,$sText,$aMatch);
echo '<pre>'.$aMatch[1].'</pre>';
于 2012-06-10T01:15:36.200 に答える
1

キャプチャ グループの出力にアクセスする必要があります。

var_dump( $aMatch[1]);

これは、正規表現が正常に機能していることを示すデモです。結果の配列に誤ってアクセスしているだけです。

于 2012-06-10T01:13:06.630 に答える