如何使用正则表达式在php中验证P4路径?

时间:2015-10-07 02:10:17

标签: php regex

如何使用正则表达式在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)

这是不正确的。有人可以指出这里有什么问题吗?

1 个答案:

答案 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次或更多次(通知(?: ..)shorthandnon-capturing group *重复了整个小组。)
  • $ 直到行尾。

<强>正则表达式:

if (!preg_match('~^//[-.\w]+(?:/[-.\w]+)*$~',$path) ) {