1

我想用 php 中的 curl 替换页面中的 url。

网址就像;

http://www.externalwebsite.com/title-of-the-page-192345.htm

我用$url = preg_replace('~a href="([a-z,.\-]*)~si', '"', $url);

这给了我正确的 id,但如果标题中使用了任何其他数字字符

例如;

http://www.externalwebsite.com/title-of-the-3-page-192345.htm

它给了我;

3-page-192345

输出。在这种情况下,如何获得正确的页面 ID。谢谢你。

更新:

我需要替换 curl 从另一个站点获取的页面中的 url。网址就像上面写的那样。

<?php

$ch = curl_init ("http://www.externalwebsite.com/index.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);
preg_match('#<div class="headline"[^>]*>(.+?)</div>#is', $page, $matches);
foreach ($matches as &$match) {
    $match = $match;
}
$html=$matches[1];   
$html = preg_replace('~a href="([a-z,.\-]*)~si', '"', $html); //NEED TO CHANGE THIS                                         

    echo $html;

?>

curl后页面的html代码没有任何preg_replace是这样的;

     <div class="swiper-slide red-slide">
    <div class="title"><a href="http://www.externalwebsite.com/title-of-the-3-page-192345.htm" class="image">
<img src="http://www.externalwebsite.com/d/news/94406.jpg"/></a></div></div>

在 preg_replace 命令之后,这个 html 必须是这样的:

<div class="swiper-slide red-slide">
        <div class="title"><a href="http://www.mywebsite.com/read_curl_page.php?id=192345" class="image">
    <img src="http://www.externalwebsite.com/d/news/94406.jpg"/></a></div></div>
4

1 回答 1

1

使用 preg_match 代替 preg_replace

<?php

  $matches = array();
  $url ='http://www.mywebsite.com/title-of-the-page-192345.htm';
  preg_match('#http://(.*?)/(.*?)-([0-9]+).htm#', $url, $matches);
  print_r($matches);
  echo $matches[2]; //this will print title of page
  echo $matches[3]; //this will print id of page
  echo $matches[1]; //this will domain
?>

它输出:

Array ( [0] => http://www.mywebsite.com/title-of-the-page-192345.htm [1] => www.mywebsite.com [2] => title-of-the-page [3] => 192345 )

preg_replace 顾名思义就是替换你想要的字符串来获取一些字符串信息。$matches子模式可以在数组中获取这些信息。数字的子模式是([0-9]+)这意味着至少 1 个数字。

于 2013-10-01T13:15:30.437 回答