2

webiste www.example.comには、多くのリストがあります。あれは、

   <ol>
    <li>This is a list saying about asp</li>
    <li>This is a list  saying about javascript</li>
    <li>This is a list saying about php</li>
    <li>This is a list saying about .net</li>
    </ol>

phpを使用して「 php 」という単語のリストを取得する必要があります。
つまり、出力は「これはphpについてのリストです」となるはずです。

preg_matchでこれを行うにはどうすればよいですか?

CURLクラスを使用してHTMLコンテンツをフェッチしました。これが私が使ったコードです

$site = $curl->get("http://www.example.com/outputs.html");
$pattern = 'I NEED TO GET THIS PATTERN';
preg_match($pattern, $site, $matches);
$php_out = $matches[1];
echo $php_out;

私が使うとき、

$pattern = '/<li>(.*?)<\/li>/s';

それは最初の結果を返します
それは「これはaspについて言っているリストです」です

4

2 に答える 2

1

/s最も簡単な解決策は、修飾子を削除することです。.その場合、改行を一致させることができない ため、各一致は1行に制限されます。

ただし、これは、HTMLがサンプルのようにフォーマットされており、各要素が別々の行にあり、要素のコンテンツに改行がない場合にのみ機能します。より堅牢なソリューションは次のとおりです。

$pattern = '~<li>[^<]*php[^<]*</li>~'

ただし、完全に有効なHTMLであっても、正規表現が失敗する原因となる可能性のあるものがたくさんあることに注意してください。これが1回限りの使い捨ての仕事でない限り、他のレスポンダーがアドバイスしたように、HTML固有のツールの使用を真剣に検討する必要があります。

于 2012-08-23T15:19:25.840 に答える
0

Webサイトのクローラーとパーサーが必要です。このlibを使用してサイトをクロールしてコンテンツを取得できるPHPCrawlというプロジェクトがあります。次に、ソースコードを解析して、指定されたパターンを検索できます。必要に応じて、正規表現を使用してそれを行うことができます。

しかし、私はあなたがこの問題を抱えたStackoverflowの最初の人ではないと思います。おそらく、ここで検索する必要があります。そうすれば、さらに多くの情報が得られます。

于 2012-08-23T12:59:16.023 に答える