基本上我正在尝试使用“?cat =(在这里插入数字)”
来创建str_replace$queryString2 = str_replace("cat=(insert number here)", "cat=4", $queryString);
有没有办法可以实现这个目标? Str_replace +一个字符,因为我搜索的值可以是任何值。
?cat=7
?cat=3
?cat=4
有什么建议吗?
答案 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=4
。 borkweb'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可能会更加简单,只需要一点点开销。