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

1つのコマンドでそれを行うのはどうですか?

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

基本的に、3 つの情報 (scheme://domain、ID 値、TYPE 値) を切り取り、これら 3 つの部分を $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 に答える