删除域扩展上的尾部斜杠而不跟踪目录

时间:2011-12-30 14:00:55

标签: php regex

我正在从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]

非常感谢

4 个答案:

答案 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);   
}

http://jsfiddle.net/xjKTS/

答案 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/
?>