0

在一段文本中,我们有几个链接,可以找到:

$regex = '\b(http://www.domain.com/)[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]';

我们想将这些 url 更改为新的,例如:

http://www.domain.com/news/item.php?ID=12321&TYPE=25进入:/news/page/$arttype-$artID/

$url 列出了其中几个 url,但我们似乎无法在 $message 中更新它们。

这是到目前为止的代码:

$string = "$message";

function do_reg($text, $regex) {
    preg_match_all($regex, $text, $result, PREG_PATTERN_ORDER);
    return $result[0];
}

$A =do_reg($string, $regex);
foreach($A as $url) {
    $check = parse_url($url, PHP_URL_QUERY);

    preg_match("/ID=([^&]+)/i", $check, $matches);
    $artID = $matches[1];

    preg_match("/TYPE=([^&]+)/i", $check, $matches);
    $arttype = $matches[1];

    preg_replace("$url", "/news/page/$arttype-$artID/", $text);
}

有谁知道如何更新在 $message 中找到的所有唯一 url?

--------使用V-tech的代码----

$message = " 
<li><strong><a href="http://www.domain.com/news/item.php?ID=12321&TYPE=25" target="_blank">Link 1</a></li>
<li><strong></strong><a href="http://www.domain.com/news/item.php?ID=12300&TYPE=2" target="_blank">Link 2</a></li>
<li><a href="http://www.domain.com/news/item.php?ID=12304&TYPE=2" target="_blank">Link 3</a></li>
<li><a href="http://www.domain.com/news/item.php?ID=12314&TYPE=2" target="_blank">Link 4</a></li>";

$pattern = "/(http:\/\/www\.domain\.com)\/news\/item\.php\?ID=([^&]+)&TYPE=(\d+)/g";
$replacement = "\${1}/news/page/\${2}-\${3}/";
preg_replace($pattern, $replacement, $message);
echo "$message ";
4

2 回答 2

1

在一个命令中完成它怎么样?

$pattern = "/(http:\/\/www\.domain\.com)\/news\/item\.php\?ID=([^&]+)&TYPE=(\d+)/";
$replacement = "\${1}/news/page/\${2}-\${3}/";
$result = preg_replace($pattern, $replacement, $message);

基本上,它将三个信息(scheme://domain、ID 值和 TYPE 值)切掉,并通过将这三个信息插入 $replacement 字符串来制作新的 url。

假设ID=([^&]+)&TYPE=(\d+),该 ID 值可以是任何东西(当心以 & 开头的 html 实体)直到 &。此处的 TYPE 值假定为数字。所以根据你的需要改变它。

更新:从 $pattern 中删除 g 标志,preg_replace() 结果放入 $result

于 2013-08-21T13:27:33.987 回答
1

From : http://www.domain.com/news/item.php?ID=12321&TYPE=25
To : http://www.domain.com/news/page/25-12321/

$string_start = '<li><strong><a href="http://www.domain.com/news/item.php?ID=12321&TYPE=25" target="_blank">Link 1</a></li>
<li><strong></strong><a href="http://www.domain.com/news/item.php?ID=12300&TYPE=2" target="_blank">Link 2</a></li>
<li><a href="http://www.domain.com/news/item.php?ID=12304&TYPE=2" target="_blank">Link 3</a></li>
<li><a href="http://www.domain.com/news/item.php?ID=12314&TYPE=2" target="_blank">Link 4</a></li>';

$string_end   = $string_start;
$string_end   = preg_replace("/(https|http):\/\/(w{0,3}\.{0,1})(domain\.com)\/news\/item\.php\?ID=([0-9]*)(&amp;|&)TYPE=([0-9]*)/", "$1://$2$3/news/page/$6-$4/", $string_end);
于 2013-08-21T17:33:16.307 回答