使用str_replace替换变量字符

时间:2010-12-31 23:05:53

标签: php string

基本上我正在尝试使用“?cat =(在这里插入数字)”

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

有没有办法可以实现这个目标? Str_replace +一个字符,因为我搜索的值可以是任何值。

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

有什么建议吗?

2 个答案:

答案 0 :(得分: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);

正则表达式cat=[0-9]+匹配字符串cat=,后跟一个或多个(+)个数字([0-9])。 preg_replace用替换字符串(参数2)替换原始字符串(参数3)中找到的正则表达式(参数1)的所有匹配项,并返回结果。

请注意,这也会将dog_and_cat=1替换为dog_and_cat=4borkweb's answer是一个更复杂的正则表达式,但如果可能出现(例如,这是用户提供的查询字符串),则处理该边缘情况。

我更喜欢实际的查询解析,但是假设没有边缘情况,正则表达式解决方案应该也能正常工作。

答案 1 :(得分:1)

是的,您可以使用preg_replace

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

该正则表达式将确保您只抓取“cat”查询字符串。这些作品如下:

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

第二个参数中的\1将第一个参数中的parens中捕获的内容插入到替换字符串中。

然而,使用parse_str example that Matchu gave可能会更加简单,只需要一点点开销。