我有一个绝对URL列表.我需要确保它们都有斜杠,如果适用的话.所以:
我猜我需要使用正则表达式,但匹配的URL很痛苦.希望有一个更简单的解决方案.想法?
Dam*_*mon 21
对于这个非常具体的问题,根本不使用正则表达式也可能是一个选项.如果您的列表很长(几千个URL)并且时间有任何问题,您可以选择手动编码这个非常简单的操作.
这将做同样的事情:
$str .= (substr($str, -1) == '/' ? '' : '/');
Run Code Online (Sandbox Code Playgroud)
它当然不像正则表达式那样优雅或灵活,但它避免了解析正则表达式字符串的开销,并且它将以PHP能够执行的速度运行.
它可以说比正则表达式更不易读,虽然这取决于读者使用正则表达式语法的舒适程度(有些人可能会觉得它更具可读性).
它肯定不会检查字符串是否真的是一个格式正确的URL(例如zerkms的正则表达式),但你已经知道你的字符串仍然是URL,所以这有点多余.
但是,如果您的列表类似于10或20个URL,请忘记这篇文章.使用正则表达式,差异将为零.
asl*_*rai 14
您可以使用正则表达式,而不是使用正则表达式parse_url()
.例如:
$url = parse_url("http://www.example.com/ab/abc.html?a=b#xyz");
if(!isset($url['path'])) $url['path'] = '/';
$surl = $url['scheme']."://".$url['host'].$url['path'].'?'.$url['query'].'#'.$url['fragment'];
echo $surl;
Run Code Online (Sandbox Code Playgroud)
$url = 'http://www.domain.com';
$need_to_add_trailing_slash = preg_match('~^https?://[^/]+$~', $url);
Run Code Online (Sandbox Code Playgroud)