質問

これが私が一致させたいパターンです:

<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);

印刷:

配列 ( )

役に立ちましたか?

解決

一般的なルールとして、正規表現は、HTMLを解析する非常に貧弱な手段です。彼らは信頼できず、本当に複雑になる傾向があります。はるかに堅牢な解決策は、HTMLパーサーを使用することです。見る PHPとDOMを使用してHTMLを解析します.

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

他のヒント

...またはこれ:

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

それもトリミングします。

パターン:

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

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

あなたはこれを試すことができます:

<a href=".*?">([\s\S]*?)</a>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top