2013-04-20 81 views
1

我无法弄清楚如何为我的preg_replace模式编写正确的模式。
我的情况是这样的:我有一个网址,让我们假设这样的:preg_replace最后一个斜杠和所有下列字符的正则表达式模式

$url = "first/second/third/fourth" 

现在,我需要删除只有最后一个“/”和所有的后字符。所以,我的结果应该变成这个样子:

first/second/third 

这一刻我解决了这个办法:

$result = substr($url, 0, (strrpos($url, "/"))); 

,但我知道应该有被创作的到我的preg_replace正确的拍打。
有什么建议吗?

回答

4

使用你有什么;它简单而高效。少括号可以使它看起来不那么复杂:

$result = substr($url, 0, strrpos($url, '/')); 

正则表达式应该是这样的:

$result = preg_replace('#/[^/]*$#', '', $url); 

正如长,稍微混乱。

+0

有趣的是他们是如何完全相同的字符数:)但哪个会更有效率? – Souleiman 2013-04-20 16:39:56

+0

@Soule:我想象第一个(正则表达式将不得不被编译,然后可能会导致效率低下 - 但另一方面,它* *是PHP),但它不应该是重要的。 – Ryan 2013-04-20 16:47:41

+0

“不成熟的优化是万恶的根源”;) – Souleiman 2013-04-20 16:49:04

0

匹配一个斜线,跟零个或多个字符不是斜线,然后是字符串的结尾:

preg_replace("/[^/]*$", "", $url) 

或者,使用非贪婪匹配(*?),这也应该工作:

preg_replace("/.*?$", "", $url) 
相关问题