使用变量PHP Regex删除URL的结尾

时间:2018-02-20 15:04:32

标签: php regex

我在正则表达式上的suuuuuck甚至无法开始弄清楚如何从#edit中删除所有内容,其中包含来自此类URL的url的可验证内容:

https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4/edit?usp=sharing

非常感谢任何帮助!

谢谢!

2 个答案:

答案 0 :(得分:0)

我相信您正在尝试解析网址末尾的query parameters。您可以使用explode函数:

执行此操作
$url = "https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4/edit?usp=sharing";
print(explode('/edit', $url)[1]);

将打印

?usp=sharing 

答案 1 :(得分:0)

使用strstr()并将第三个参数设置为true将是最干净,最直接的非正则表达式方法。 ...而且你不会为你的" suuuuucky"正则表达式技巧;)这会将子字符串从字符串的开头隔离到搜索子字符串之前的字符。

代码:(Demo

$url = 'https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4/edit?usp=sharing';

echo strstr($url, '/edit', true);  // https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4
echo "\n";
echo strstr($url, '/edit?', true);  // https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4

*注意:如果?之后查询字符串(以/edit开头)始终存在,则将?添加到搜索子字符串只能提高准确性。

为什么这是最好的功能?它没有利用调用正则表达式引擎的开销,它不会生成任何临时数组,而且它是单个函数调用而不是substr() - strrpos()

如果您的用例稍微复杂一点,并且这种方法让您失望,那么调用parse_url()应该足够稳定,以便您提取适当的url组件。

代码:(Demo

$url = 'https://docs.google.com/presentation/d/1aa_xpsyJtslFJsg4UndsjDvlCe7Vu97_i6Q8zSKofy4/edit?usp=sharing';
$components = parse_url($url);
echo $components['scheme'], '://', $components['host'], strstr($components['path'],'/edit',true);