如何使用正则表达式在PHP中验证perforce路径,如下所示?
接受的路径: // somechars(以//开头而不以/结尾) 以下是有效路径:
std::future<double> ret = std::async(&NearestPoints::otherCoordinate,&instance_name,coordinate1,std::ref(coordinate2));
以下是无效路径:
//depot/abc/pqr/a23/72-32/abc
//something
//something123
以下是我提出的功能:
///depot (has to start with // and more more slashes)
//depot/abc/ (cannot end with /)
//depot//test (cannot have // in between)
这是不正确的。有人可以指出这里有什么问题吗?
答案 0 :(得分:2)
您使用的模式匹配:
\/\/[A-Za-z0-9\-_\.]+
//
后面至少有一个[A-Za-z0-9\-_.]
。但是,它可以匹配字符串中的任何位置,而不一定是在开始时。.*
中间允许的任何文字。这不是你想要的,是吗?[A-Za-z0-9\-_\.]$
结束其中一个字符(该部分看起来不错)。以下是您应该验证的内容:
^//
以//
开头(注意^
与该行开头的位置相匹配)。[-.\w]+
之后是一个或多个-_.A-Za-z0-9
(\w
是[A-Za-z0-9_]
的{{3}} (?:/[-.\w]+)*
后跟/
且字符与之前相同,重复0次或更多次(通知(?: ..)
为shorthand, non-capturing group *
重复了整个小组。)$
直到行尾。<强>正则表达式:强>
if (!preg_match('~^//[-.\w]+(?:/[-.\w]+)*$~',$path) ) {