Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_的正则表达式模式替换最后一个斜杠和以下所有字符_Php_Regex - Fatal编程技术网

Php preg_的正则表达式模式替换最后一个斜杠和以下所有字符

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_______替换中。 有什么建议吗?匹

我不知道如何为preg\u replace模式编写正确的模式。
我的情况是:我有一个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:它是一个分隔符!通常,我会使用斜杠,但表达式中有斜杠,所以我选择了另一个。另一个常用的分隔符是波浪线。