0

グーグルで少し試みても答えられる質問をしているのですが、これができるものが見つからないので、ここで質問しています。plsは反対票を投じて閉じないでください。他の人にも役立ちます。

私の問題は、文字列の一部を探し、それを見つけて置き換える必要があるということです。しかし、私の問題は、文字列のその部分が毎回変更されることです。そのため、正規表現を挿入する必要があります。

$url = "www.google.com/test=2";
replace the 'test=2' with 'test=1'
$result = "www.google.com/test=1"

重要なのは、スラッグは1から20までの任意の数を持つことができるということです。test=\d{1,20}これが当てはまります。私は試しましpreg_replacesubstr_replaceが、どれもこれを行うことができません。

4

4 に答える 4

4

次の何が問題なのかわかりません/test=\d+/か?あなたの問題は、修飾子を忘れていることだと思います(あなたの例では:http ://codepad.org/ZZNNr1bHですが、次のような修飾子を使用する必要があります:http: //codepad.org/9TEkPYJo

<?php
    $url = "www.google.com/test=2";
    $result = preg_replace("/test=\d+/", "test=1", $url);
    //                      ^        ^
    var_dump($result);
?>

更新

とはいえ、アシュリーが述べたように、\d{1,20}「1から20」ではなく、「1から20回繰り返される任意の数字」を意味します。

0〜20の数字のみが必要な場合は、次の正規表現を使用します。

/test=([0-9]|1[0-9]|20)/

基本的な意味(0〜9の数字または1の後に0〜9の数字または20の数字が続く)

に短縮することもできます

/test=(1?\d|20)/

意味(1が1回または0回繰り返され、その後に0〜9の数字または数字の20が続く)

于 2013-01-08T13:47:21.780 に答える
1

また、\ d {1,20}は1から20までの数字とは一致しませんが、0から99,999,999,999,999,999,999は、あなたが求めているものとは正確には一致しません。

于 2013-01-08T13:49:58.937 に答える
1
$url = "www.google.com/test=2";
$replacement = 1;
echo preg_replace('/(.*test)=([1-20])/', "$1=1" ,$url);

私が質問を正しく理解していれば、これでうまくいくはずです。

于 2013-01-08T13:56:57.160 に答える
0
$url = "website.com/test=1/asdasd/....";
$check= "test=1";
$newval = "test=2"

if(strstr($url,$check))
  $result = preg_replace($check, $newval, $url);

値が文字列内に含まれている場合は、それを置き換えることができます。

于 2013-01-08T14:33:41.513 に答える