求大牛解释下这个正则表达式:/^.+[\\\\\\/]/,最主要是为什么要那么多的转义字符,
当然了我理解他是想对\和/进行单选,但为什么要那么多。functionsbasename($filename){returnpreg_replace('/^.+[\\\\...
当然了我理解他是想对\和/进行单选,但为什么要那么多。
function sbasename($filename)
{
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
这是源码,网上copy,运行ok
功能是取得路径中的文件名称,因为basename()方法不能取得含有中文名称的文件 展开
function sbasename($filename)
{
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
这是源码,网上copy,运行ok
功能是取得路径中的文件名称,因为basename()方法不能取得含有中文名称的文件 展开
展开全部
这个看语境的,理论上\\ 和\/就足够了,但是某些情况下这个字符串需要进行二次转义,所以\\就变成了\\\\,\/变成了\\/
比如$i = "\\\\\\/";
$reg = "/^.+" . $i . "/";
比如$i = "\\\\\\/";
$reg = "/^.+" . $i . "/";
更多追问追答
追问
嗯,很好!但依然不理解有哪些情况需要进行二次转义。
追答
刚才说的有点乱,其实正则表达式本身就是需要二次转义的。是这样,对于字符串来说,'\'是需要转义的,如果你希望最后的结果是'\',那么必须用\\代替,这个可以明白撒?
然后,对于正则表达式来说,\和/都是特殊字符,所以必须使用\\和\/。
现在你的表达式写在引号里面,PHP解析器首先从引号中获取值,得到\\\/,然后正则表达式解析器解析\\\/得知你想要字符\和/
很绕嘴啊,解释清楚没?
2013-03-11 · 知道合伙人互联网行家
关注
展开全部
你好,在JS里只是对\和/进行单个匹配的话这样就可以了/[\\\/]/
在正则表达式里,中括号[] 里的内容是一个集合,同样的字符,多个和一个是同样的效果。
在正则表达式里,中括号[] 里的内容是一个集合,同样的字符,多个和一个是同样的效果。
追问
感谢专家!
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来告诉你吧!其实这代码是一个一堆人转载时候的误传,本身用
return preg_replace('/^.+[\\/]/', '', $filename);
就直接可以了。为毛多出那么多\\\\呢?由于\是敏感字符,某些网站会对\进行过滤。尤其是在php老版本(5.5已经没有了)默认开启magic_quotes_gpc时候,会对所有\进行添加\防止被黑。然后这个程序被转来转去,自动就加了很多个\
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两边的斜线(/)不看
正则是 ^.+[\\\\\\/]
^表示这个是开始位置
.表示除“\n”之外的任何单个字符
+表示匹配前面的那个字符1次或多次
[] 表示可选字符
下面这些都可以匹配:
ww\\\\\\\\\\
cc\
a\
bb//////////////////
b/
c/
kkkkkkk/
kkkkkkk\
kkkkkkk///
它跟 ^.+[\\/] 的效果是一样的。
至于它为什么要那么写3个反斜线,大概是因为他很闲吧。
正则是 ^.+[\\\\\\/]
^表示这个是开始位置
.表示除“\n”之外的任何单个字符
+表示匹配前面的那个字符1次或多次
[] 表示可选字符
下面这些都可以匹配:
ww\\\\\\\\\\
cc\
a\
bb//////////////////
b/
c/
kkkkkkk/
kkkkkkk\
kkkkkkk///
它跟 ^.+[\\/] 的效果是一样的。
至于它为什么要那么写3个反斜线,大概是因为他很闲吧。
更多追问追答
追问
\\\\\\/和\\/是不一样滴,我说了,在中括号里,他是想对\和/进行二选一。
\\/代表的是/,再前面\\代表的是\,我不理解的是为什么前面还有两个\转义符
追答
\\是转义\
/不需要转义
它的代码可能在用的时候需要转移\
比如C/C++:
char* regex = "\\\\";//这个正则是\\
char regex2 ="\\\\/";//这个正则是\\/
应该不是
\\\ \\\/
而是
\\ \\ \\ /
实际的正则应该是 \\/
这个/不需要转义,应该写成\\ \\ /
我没见过对/转义的。
来自:求助得到的回答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
\\是正则的转义处理一些特殊字符的
\\\是\
*************************
\\\\是因为在winxp中需要前面在带一个\
那个就是带三个\\\加一个/就可以了
你写的那个怎么那么多\,O(∩_∩)O,是不是你搞错了
\\\是\
*************************
\\\\是因为在winxp中需要前面在带一个\
那个就是带三个\\\加一个/就可以了
你写的那个怎么那么多\,O(∩_∩)O,是不是你搞错了
追问
感谢!
代码是网上copy的,而且我运行也没有出错!所以...
function sbasename($filename)
{
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
功能是取得路径中的文件名称,因为basename()方法不能取得含有中文名称的文件
\\\\是因为在winxp中需要前面在带一个\。这个真没听过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询