说我有一个字符串:
something.something/search?&abc=xyz:??????q=hello+there
或
something.something/search?abc=xyz:??????q=hello+there
我需要将变量子串:[&]abc=xyz:??????
移动到sting的末尾。
所以我结束了:
something.something/search?q=hello+there&abc=xyz:??????
从一开始就知道子串是多长时间。
我们知道子字符串在第一个?
之后就开始了
可能以&abc=xyz:?????
或可能abc=xyx:?????
开头。
?????
可能有也可能没有,但它们的长度不确定。
和内容。
我们知道子串在q=......
处结束。
因此,首先?
到第一个q=
之间的内容会被删除并添加到字符串中。
但是,结尾必须以&
开头,且只有1 &
。
所有这些仅适用于包含something.something/search?
的字符串。
子字符串非常可变。
我也想知道在尝试改变之前是否应该测试一下。
由于
它说编辑问题所以这里。我想你越来越近了。 典型的$ url将是: https://www._oogle.com/search?&tbs=qdr:q=hello+there //你好+只有例子。 https://www._oogle.com/search?tbs=qdr:q=hello+there //...qdr:null|h | d | w | m | y用于过去页面搜索。 (多久)null(全部),小时,天,周,月,年。 如果tbs:qdr部分首先出现其他事情,那么我必须将其移动 q = ...部分。 当然是要考虑的http:// varients。
我正在考虑使用我制作的包含函数来查看此$ url是否需要此处理。但是,它需要捕获“_oogle.com/search?&tbs=qdr:”的可能性。 (以&符号开头)[null |&] tbs = qdr:[null | h | d | w | m | y]。我想在“q =”部分之前可能还有其他参数,但我们稍后会担心。
if (contains($url, "_oogle.com/search?tbs=qdr:"))
function contains($haystack, $needle) {
if(stristr($haystack, $needle) === FALSE) { return false; }
else {return $needle; }
答案 0 :(得分:0)
我不知道这是否正是您所寻找的,但您可以尝试在您的参数上使用正则表达式。如果你在q=
之前和之后有更多的参数,你将不得不再操纵正则表达式,你将不得不循环一个数组来定义你正在寻找的参数的正确位置。这是你可以做的一个例子。
$baseUrl = 'http://www.google.com';
$parseUrl = parse_url($baseUrl.'/search?&abc=xyz:??????q=hello+there');
preg_match_all('/&?(.*)q=(.*)/',$parseUrl['query'],$matches, PREG_PATTERN_ORDER);
echo $baseUrl.'/search?q='.$matches[2][0].'&'.$matches[1][0];