Php preg_的正则表达式模式替换最后一个斜杠和以下所有字符
我不知道如何为preg\u replace模式编写正确的模式。Php preg_的正则表达式模式替换最后一个斜杠和以下所有字符,php,regex,Php,Regex,我不知道如何为preg\u replace模式编写正确的模式。 我的情况是:我有一个URL,让我们假设: $url = "first/second/third/fourth" 现在,我只需要删除最后一个“/”和其后的所有字符。所以我的结果应该是这样的: first/second/third 在这一刻,我这样解决: $result = substr($url, 0, (strrpos($url, "/"))); 但我知道应该有正确的模式写入我的preg_______替换中。 有什么建议吗?匹
我的情况是:我有一个URL,让我们假设:
$url = "first/second/third/fourth"
现在,我只需要删除最后一个“/”和其后的所有字符。所以我的结果应该是这样的:
first/second/third
在这一刻,我这样解决:
$result = substr($url, 0, (strrpos($url, "/")));
但我知道应该有正确的模式写入我的preg_______替换中。有什么建议吗?匹配一个斜杠,后跟零个或多个非斜杠字符,后跟字符串结尾:
preg_replace("/[^/]*$", "", $url)
或者,使用非贪婪匹配(*?
),这也应该有效:
preg_replace("/.*?$", "", $url)
匹配斜杠,后跟零个或多个非斜杠字符,后跟字符串结尾:
preg_replace("/[^/]*$", "", $url)
或者,使用非贪婪匹配(*?
),这也应该有效:
preg_replace("/.*?$", "", $url)
利用你所拥有的;它简单而有效。减少括号可以使它看起来不那么复杂:
$result = substr($url, 0, strrpos($url, '/'));
正则表达式如下所示:
$result = preg_replace('#/[^/]*$#', '', $url);
同样长,稍微让人困惑。利用你所拥有的;它简单而有效。减少括号可以使它看起来不那么复杂:
$result = substr($url, 0, strrpos($url, '/'));
正则表达式如下所示:
$result = preg_replace('#/[^/]*$#', '', $url);
同样长,稍显混乱。有趣的是,它们的字符数完全相同:),但哪一个更有效?@Soule:我想第一个(正则表达式必须编译,然后可能会转换为效率较低的东西-另一方面,它是PHP),但这并不重要。“过早的优化是万恶之源”是 啊成功了!我只是对“#”的用法有点困惑……但它起了作用!谢谢…@ilSavo:这是一个分隔符!通常,我会用斜线,但是表达式中有斜线,所以我选择了其他的东西。另一个常见的分隔符是tilde。有趣的是,它们的字符数完全相同:)但哪一个效率更高?@Soule:我想象第一个分隔符(必须编译正则表达式,然后可能会使用效率更低的东西——另一方面,它是PHP),但它不应该很重要。“过早的优化是万恶之源”;)是的!它起作用了!我只是对“#”的用法有点困惑…但它起作用了!谢谢…@ilSavo:它是一个分隔符!通常,我会使用斜杠,但表达式中有斜杠,所以我选择了另一个。另一个常用的分隔符是波浪线。