2010-12-31 11 views
0

変数の文字を置き換えるためにstr_replaceを使用した「?猫=(ここに番号を挿入)」基本的に私が持つstr_replaceを実行しようとしてい

$queryString2 = str_replace("cat=(insert number here)", "cat=4", $queryString); 

はこれを達成することができます方法はありますか? Str_replace +検索する値が何でもかまいませんので、1文字です。

?cat=7 
?cat=3 
?cat=4 

お勧めはありますか?

+2

Yup、正規表現。 – BoltClock

答えて

5

クエリ文字列をより確実に処理する方法は、実際にそれらを解析することです。

// If your original query string was just the data in $_GET, clone $_GET: 
$new_query = $_GET; 
// Otherwise, parse the original query string using parse_str: 
parse_str($original_query_string, $new_query); 
// Then, set the new cat value, and build a new query string. 
$new_query['cat'] = 4; 
$new_query_string = http_build_query($new_query); 

あなたが元々記述技術は、正規表現の仕事です:)

$queryString2 = preg_replace('/cat=[0-9]+/', 'cat=4', $queryString); 

一つ以上(+)桁([0-9])に続く文字列cat=にマッチする正規表現cat=[0-9]+preg_replaceは、元の文字列(引数3)にある正規表現(引数1)のすべての一致を置換文字列(引数2)に置き換えて結果を返します。

dog_and_cat=1dog_and_cat=4に置き換えることに注意してください。 borkweb's answerはより複雑な正規表現ですが、発生する可能性がある場合(例:これはユーザーが提供するクエリ文字列など)、そのエッジケースを処理します。

私は実際のクエリ解析を好みますが、正規表現ソリューションは理想的にはエッジケースがないと仮定しても理想的に動作するはずです。

+0

"cat"はここの "category"の略です:P – BoltClock

+5

@BoltClock:ああ、あなたは 'preg'が立っていないことを試してみるつもりですか?ストリングは妊娠していますか? D: – Matchu

+0

それは私が徹夜で読んだ最高の返信でした。 – BoltClock

1

うん、あなたはpreg_replaceを使用することができます。regexで

$queryString2 = preg_replace('/([&?])cat=[0-9]+/', '\1cat=4', $queryString); 

は、あなただけの「猫」クエリ文字列をつかむことを確認します。最初のパラメータの括弧内に捕捉されたどのような置き換え文字列に第2のパラメータインサートで

([&?]) # match either and ampersand or question mark 
cat= # match "cat=" 
[0-9]+ # match 1 or more digits. 

\1次のよう個です。

ただし、parse_strexample that Matchu gaveを使用すると、オーバーヘッドが少しでも簡単になります。

+0

regexソリューションを使用する場合、代わりに 'preg_replace( '/(?<= [?&])cat = [0-9] + /'、 'cat = 4'、$ queryString)'を使うべきでしょう。 ) – NikiC

関連する問題