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);