php 怎么用正则删除目录后面的斜杠:“/”?
在进行目录管理时,提交后,网址中的目录最后面会多出/web/new/目录名每提交一次会多一个出来web/new/images//web/new/images///web/...
在进行目录管理时,提交后,网址中的目录最后面会多出/
web/new/目录名
每提交一次会多一个出来
web/new/images//
web/new/images///
web/new/images//////
目录名有不同,如:
web/new/class///
web/new/class////////
web/new/class/
怎么用正则把多出来的过滤掉?
只保留:
web/new/images
web/new/class 展开
web/new/目录名
每提交一次会多一个出来
web/new/images//
web/new/images///
web/new/images//////
目录名有不同,如:
web/new/class///
web/new/class////////
web/new/class/
怎么用正则把多出来的过滤掉?
只保留:
web/new/images
web/new/class 展开
5个回答
展开全部
表达式:
(.*?)(?:\/(?!\w)|$)
主要是零宽断言的运用:
\/(?!\w) 匹配后面不是 / 的字符
测试代码:
<?php
$str = array(
'web/new/images',
'web/new/images/',
'web/new/images/////',
'web/new/images//xxx//xxx////', // 这样的路径,使用 preg_match 和 preg_replace 会有点细微差别
);
foreach ($str as $s)
{
// 使用 preg_match 的用法
preg_match('/(.*?)(?:\/(?!\w)|$)/', $s, $matche);
echo "preg_match: {$s} => {$matche[1]}\r\n";
//使用 preg_replace 的方法
$ns = preg_replace('/(.*?)(?:\/(?!\w)|$)/', '$1', $s);
echo "preg_replace: {$s} => {$ns}\r\n";
}
?>
(.*?)(?:\/(?!\w)|$)
主要是零宽断言的运用:
\/(?!\w) 匹配后面不是 / 的字符
测试代码:
<?php
$str = array(
'web/new/images',
'web/new/images/',
'web/new/images/////',
'web/new/images//xxx//xxx////', // 这样的路径,使用 preg_match 和 preg_replace 会有点细微差别
);
foreach ($str as $s)
{
// 使用 preg_match 的用法
preg_match('/(.*?)(?:\/(?!\w)|$)/', $s, $matche);
echo "preg_match: {$s} => {$matche[1]}\r\n";
//使用 preg_replace 的方法
$ns = preg_replace('/(.*?)(?:\/(?!\w)|$)/', '$1', $s);
echo "preg_replace: {$s} => {$ns}\r\n";
}
?>
参考资料: http://deerchao.net/tutorials/regex/regex.htm
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哥们,用 explode(“/”,目录名),然后在用“/”把值不为空的数组元素连起来!这个我测试过了。。。。。。。。。是不是没有效率??等高人.........
或
用 substr() 从后面截取,截到是字母的地方。。。。。正在测试,这是个思路
或
用 substr() 从后面截取,截到是字母的地方。。。。。正在测试,这是个思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<?php echo str_replace(array("//","///","////","/////","//////","////////","/////////"), array("/","/","/","/","/","/","/"),$row_xx['xxx']); ?>
追问
你那个最后还是会有一个斜框的
而且这个方法不现实,随着提交次数的增多,不知最后会增加出多少个/来
preg_match("/能不能用这样的正则过滤/",web/new/images//////,$matches);
echo $matches[0];
得出web/new/images
最后面不带斜杠的
不知道正则怎么写?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
preg_replace("/(images?|class)(\/)\2{1,}/", "$1", $str) ;
更多追问追答
追问
web/new/images
这些目录名不固定,不管是什么,主要要去掉最后面的斜杠,不管多少斜杠
$file="web/new/images//////";
也可能是
$file="a/b/c//////";
或
$file="h/d/r//////";
等
preg_match("/XXXXXXXXXX/",$file,$matches);
echo $matches[0];
追答
preg_replace("/\b(\/)\1{0,}$/", '', $str) ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询