Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从字符串中删除子字符串_Php_Regex - Fatal编程技术网

PHP从字符串中删除子字符串

PHP从字符串中删除子字符串,php,regex,Php,Regex,嘿,我需要删除字符串的一部分(我不是: $content = "user=predator1&scode=mau4&athleteid=17007"; $content = "user=predator1&athleteid=17007"; 我需要删除“$code=XXXXX”部分(XXXXX部分是可变的) 我试过用这个: $content = preg_replace("/&scode=[^a-z]*/", "", $content); 但是不起作用 我

嘿,我需要删除字符串的一部分(我不是:

$content = "user=predator1&scode=mau4&athleteid=17007";

$content = "user=predator1&athleteid=17007";
我需要删除“$code=XXXXX”部分(XXXXX部分是可变的)

我试过用这个:

$content = preg_replace("/&scode=[^a-z]*/", "", $content); 
但是不起作用

我怎样才能解决这个问题


谢谢!!!

不应该像
“/&scode=[^a-z]*/”
那样更像
“/&scode=[a-zA-Z0-9]*/”

这将在不使用正则表达式的情况下工作:

$pre = "user=predator1&scode=mau4&athleteid=17007";
$exp = explode('&', $pre);
$content = implode('&', array($exp[0], $exp[2]));

可能有一种更简单/更快的方法涉及regex,但这种方法是安全的(
parse_str
确保正确解析查询字符串)


parse\u str的文档

您应该试试这一行:

 $content = preg_replace("/&scode=[a-zA-Z0-9]*/", "", $content); 
它表示删除任何以
&scode
开头,后跟任意数量的小写字母、大写字母或数字的内容

在原始代码中,您使用的是
[^a-z]*
。字符列表中的
^
表示与任何小写字母都不匹配,因此它会在看到小写字母后立即停止替换内容。基本上,正则表达式只会删除开始代码的数字,但如果代码中包含小写字符,则不会删除任何其他内容

我上面的正则表达式是一个包含列表,表示删除列表中的任何内容,因此它将删除任何字母数字字符


希望有帮助。

只有在只有三个参数的情况下。谢谢,但是如果子字符串的最后一个字符是字母数字字符,如$content=“user=tradator1&scode=mau4”(而不是另一个参数的-),如何设置正则表达式来管理此选项?@Gabriele:我不知道你在问什么。我答案中的正则表达式与该字符串匹配。@Gabriele:你的意思是“如果
scode
是第一个变量,因此没有一个前导的
&
,怎么办?你可以很容易地使用它。如果这是你的意思,请告诉我,我会更新我的答案。谢谢,但最后我使用了John Himmelman版本。它工作得很好,没有任何问题!
$content = "user=predator1&scode=mau4&athleteid=17007";

parse_str($content, $vars);

if (isset($vars['code']))
{
 unset($vars['code']);
}

$content = http_build_query($vars);

var_dump($content);
$content = preg_replace("|&scode=[a-zA-Z0-9]+&|", '&', $content);
 $content = preg_replace("/&scode=[a-zA-Z0-9]*/", "", $content);