我正在从csv导入数据,我一直在寻找特定正则表达式的高低,以便在没有目录后从域名中删除尾随斜杠。请参阅以下示例:
example.com/ (remove trailing slash)
example.co.uk/ (remove trailing slash)
example.com/gb/ (do not remove trailing slash)
任何人都可以帮我解决这个问题,或者至少指出我正确的方向吗?
编辑:到目前为止,这是我的进展,我目前只匹配了扩展程序,但它正在使用尾随目录获取这些域名。
[a-z0-9\-]+[a-z0-9]\/[a-z]
非常感谢
答案 0 :(得分:3)
我不知道它与正则表达式的性能比较,但你可以在没有它的情况下做到这一点。
一个简单的例子:
$string = rtrim ($string, '/');
$string .= (strpos($string, '/') === false) ? '' : '/';
在第二行中,如果字符串已经包含一个(从文件夹中分离域名),我只会在末尾添加/
。
如果找到的第一个rtrim
是字符串的最后一个字符,则更加可靠的方法可能只有/
。
答案 1 :(得分:0)
不确定,
但你可以试试这个,
如果只是$_SERVER['SERVER_NAME']
,则删除斜线,否则保留
因为$ _SERVER ['SERVER_NAME']将返回没有任何目录的网址
试试这个
/^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&%\$#\=~])*$/i
答案 2 :(得分:0)
您可以在/ [a-z] /上测试匹配,然后删除最后一个字符(如果找不到)。
这是javascript,但它在php中类似。
/\/[a-z]+\//
var txt = 'example.com/gb/';
var match = txt.match(/\/[a-z]+\//);
if (!match) {
alert(txt.substring(txt,txt.length-1));
}
else {
alert(txt);
}
答案 3 :(得分:0)
试试这个,它有效:
<?
$result = preg_replace('/^([^\/]+)(\/)$/','$1',$your_data);
?>
我测试过这样:
$reg = '/^([^\/]+)(\/)$/';
echo preg_replace($reg,'$1',$str1);//example.com
echo preg_replace($reg,'$1',$str2);//example.co.uk
echo preg_replace($reg,'$1',$str3);//example.com/gb/
?>