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

时间:2010-12-15 22:57:52

标签: php regex

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

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

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

我需要删除“$ code = XXXXX”部分(XXXXX部分是可变的)

我尝试过使用它:

$content = preg_replace("/&scode=[^a-z]*/", "", $content); 

但不起作用......

我该如何解决这个问题?

谢谢!!!

6 个答案:

答案 0 :(得分:4)

可能有一个更简单/更快的方法涉及正则表达式,但此方法是安全的(parse_str可确保正确解析查询字符串。)

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

parse_str的文档:http://www.php.net/manual/en/function.parse-str.php

答案 1 :(得分:1)

你应该尝试这一行:

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

它表示删除任何以&scode开头的内容,后跟任意数量的小写字母,大写字母或数字。

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

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

希望有所帮助。

答案 2 :(得分:0)

"/&scode=[^a-z]*/"不应该更像"/&scode=[a-zA-Z0-9]*/"吗?

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

preg_replace("/code=[a-zA-Z0-9]*/", "code=", $content); 

答案 5 :(得分:0)

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