0

たとえば、ここからデータ応答があります: http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1

次のようなパターンがあります。

data-hovercard=\"\/ajax\/hovercard\/hovercard.php?id=655581307\">

PHP で preg_match_all() を使用して解析するにはどうすればよいですか? 複雑な正規表現が必要なのはわかっていますが、そのようなパターンの正規表現をテキストに記述する方法がわかりません。手伝ってくれてありがとう

UPD:次のコードはIDを提供します:

$str = 'hovercard.php?id=655581307';
preg_match_all('/[0-9]{9}/', $str , $matches);
print_r($matches);

しかし

これはしません

$url = 'http://www.facebook.com/ajax/shares/view/?target_fbid=410558838979218&__a=1';
$html = file_get_contents($url);
preg_match_all('/[0-9]{9}/', $html, $matches);
print_r($matches);
4

1 に答える 1

2

バックスラッシュがエスケープしているため、これは少し面倒ですが、その文字列と正確に一致させるには、 preg_match_all() へのこの呼び出しが機能するはずです。

preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=[0-9]+\\\\">)#', $str, $matches);

これにより、$matches に投稿した文字列全体が得られます。ただし、id からの数値のみが必要な場合は、次のように括弧を追加できます。

preg_match_all('#(data-hovercard=\\\\"\\\\/ajax\\\\/hovercard\\\\/hovercard.php\?id=([0-9]+)\\\\">)#', $str, $matches);

また、数値は $matches に個別に表示されます (同様に、正規表現全体を囲む括弧を削除して、文字列全体の一致を停止できます)。

アップデート:

そして今、質問が更新されているのがわかります。新しい例が失敗した場合、取得したデータに 9 桁のシーケンスがないためです。自分で試してみると、ログインする必要があるという応答が返されるだけなので、マッチングの問題は、実際には期待するデータを取得できないことが原因である可能性がありますか? $html をダンプして、探しているものが実際にそこにあるかどうかを確認してください。

于 2012-07-11T16:12:59.917 に答える