用正则表达式删除字符串的末尾部分

时间:2010-02-03 17:38:28

标签: php regex preg-replace

我正在尝试从字符串中删除所有以/字符开头的内容,所以如果我有

my_value/j/im<b*+èo[/h>e\ylo

我想删除字符串/j/im<b*+èo[/h>e\ylo并仅返回my_value。 我想用str_replace的东西,但我不是一个伟大的正则表达式程序员,我正在用PHP练习。

function clean_value ($value) {
    return preg_replace ("^(/.*?)$", "", $value);
}

我该怎么办?

4 个答案:

答案 0 :(得分:5)

这里没有理由使用正则表达式。请改用strpos()substr()组合:

$original = 'my_value/j/im<b*+èo[/h>e\ylo';

$removed = substr($original, 0, strpos($original, '/'));

如果您可以保证字符串中始终至少包含1个/字符,则上述操作将起作用。如果您不能保证或不知道,只需修改为:

$removed = (strpos($original, '/') === false)
             ? $original 
             : substr($original, 0, strpos($original, '/'));

答案 1 :(得分:3)

最简单的事情可以在没有正则表达式的情况下完成

$string = "my_value/j/im<b*+èo[/h>e\ylo";
$splitted = explode("/",$string,2);
echo  "$splitted[0]\n";

答案 2 :(得分:2)

您忘记了正则表达式中的delimiters^/要求字符串以/开头。

请改为尝试:

preg_replace("~/.*~", "", $value)

这将删除第一个/到最后的所有内容。

答案 3 :(得分:2)

您需要从正则表达式中删除起始插入符号,并且可以使用贪婪匹配来获取字符串的其余部分:

function clean_value ($value) {
    return preg_replace ("/\/.*/", "", $value);
}