0

一致させたいパターンは次のとおりです。

<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">

これは私がやっていることです:

$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';

preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);

print_r($matches);

それは印刷します:

配列 ( )

4

4 に答える 4

5

原則として、正規表現は HTML を解析するための非常に貧弱な手段です。それらは信頼性が低く、非常に複雑になる傾向があります。はるかに堅牢なソリューションは、HTML パーサーを使用することです。PHP と DOM を使用して HTML を解析するを参照してください。

あなたの表現について<div class="productTitle"は、ソースのどこにも表示されないので、そこから始めます。同様に、URL を解析しようとしていますが、アンカー タグが (直接または十分なワイルドカードを介して) 言及されていないため、そこでも失敗します。基本的に、その式は、解析しようとしている HTML とはまったく異なります。

于 2009-11-13T00:57:35.807 に答える
1

...またはこれ:

preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);

それもトリミング。

于 2011-11-23T19:07:34.587 に答える
0

パターン:

/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m

リンクとテキストは大まかに取得できますが、DOM ライブラリを使用する方がはるかに優れた方法です。

于 2009-11-13T01:32:58.463 に答える
0

これを試すことができます:

<a href=".*?">([\s\S]*?)</a>
于 2009-11-13T01:37:48.690 に答える