-1

なぜこれが一致しないのかわかりません。しかし、HTMLのページ全体があり、リンクのテキストが「お問い合わせ」、「お問い合わせ」、「お問い合わせ」などであるかどうかに関係なく、お問い合わせリンクが必要だとしましょう.

サンプル HTML:

<a href="contact.html">
    Contact Us
</a>

何にも一致していませんが、使用しようとしている preg_match は次のとおりです。

preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/is',$data,$matches);

Matches は単なる空の配列です

4

2 に答える 2

0

その理由は 。新しい行と一致していません。複数行の修飾子(m)を正規表現に追加すると、機能するはずです。

preg_match('/<a.*href="(.*)".*>.*contact.*<\/a>/ism',$data,$matches);
于 2013-01-22T17:09:48.923 に答える
0

有効な<a href="#"></a>タグのみに一致することを確認するための厳密な正規表現を次に示します。

 $content = '<a href="contact.html">Contact Us</a>';
 $regexp = "/<a\s[^>]*href=([\"\']??)([^\" >]*?)\\1[^>]*>(.*)contact(.*)<\/a>/siU";
 preg_match_all($regexp, $content, $match, PREG_SET_ORDER);

HTML ページをスクレイピングしたいが、長い正規表現を記述してテストする必要がない場合。PHPQueryライブラリを試してみてくださいCSS スタイル セレクターを使用して、HTML からデータを抽出できます。

編集:

PHPQuery で同じことを行う方法。

 phpQuery::newDocument('<a href="contact.html">Contact Us</a>');
 $links = pq('a:contains("Contact")');
于 2013-01-22T17:12:30.760 に答える