0

MySQLデータベースに多数のWebページが保存されています。

これらのページのほとんどには、このようなエントリが少なくとも1つ(場合によっては2つ)含まれています...

<a href="http://first-url-which-always-ends-with-a-slash/">
  <img src="http://second-different-url-which-always-ends-with.jpg" />
</a>

最初のURLをそのエントリの2番目のURLのコピーに置き換えて、すべての全体を通過する小さなphpループを設定したいと思います。

pregを使用して次のことを行うにはどうすればよいですか?

  1. 画像タグから2番目のURLを見つける
  2. タグの最初のURLを2番目のURLのコピーに置き換えます

これは可能ですか?

4

3 に答える 3

1

このURLを参照してください

PHP pregの一致/置換?

参照:-http://php.net/manual/en/function.preg-replace.php

$qp = qp($html);
foreach ($qp->find("img") as $img) {
    $img->attr("title", $img->attr("alt"));
}
print $qp->writeHTML();

この単純なケースでは、正規表現に頼ることは可能かもしれませんが、次のようになります。

preg_replace('#(<img\s[^>]*)(\balt=)("[^"]+")#', '$1$2$3 title=$3', $h);

(preg_replace_callbackを使用して、title =属性がまだ存在しないことを確認する方が理にかなっています。)

于 2012-08-17T09:51:07.540 に答える
0

あなたは以下を行うことができます:

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
$source = "<a href=\"http://first-url-which-always-ends-with-a-slash/\">
  <img src=\"http://second-different-url-which-always-ends-with.jpg\" />
</a>";
$dom->loadHTML($source);
$tags = $dom->getElementsByTagName('a');

foreach ($tags as $tag) {
  $atag = $tag->getAttribute('href');  
  $imgTag = $dom->getElementsByTagName('img');
  foreach ($imgTag as $img) {        
    $img->setAttribute('src', $atag);
    echo $img->getAttribute('src');
  }
}
于 2012-08-17T10:41:14.213 に答える
0

提案をありがとう、私はそれらがPregを使用するよりもどのように優れているかを見ることができます。

それでも、私はついにこのような自分の質問を解決しました...

$result = mysql_query($select);
while ($frow = mysql_fetch_array($result)) {
    $page_content = $frow['page_content'];

    preg_match("#<img\s+src\s*=\s*([\"']+http://[^\"']*\.jpg[\"']+)#i", $page_content, $matches1);
    print_r($matches1);
    $imageURL = $matches1[1] ; 

    preg_match("#<a\s+(?:[^\"'>]+|\"[^\"]*\"|'[^']*')*href\s*=\s(\"http://[^\"]+/\"|'http://[^']+/')#i", $page_content, $matches2);
    print_r( $matches2 );  
    $linkURL = $matches2[1] ;

    $finalpage=str_replace($linkURL, $imageURL, $page_content) ;
}
于 2012-08-22T11:15:22.137 に答える