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


How to validate P4 path in php using regex?

如何在PHP中使用正则表达式验证以下强制路径?

接受路径://somechars(以//开始,不以/结束)以下是有效的路径:

//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)

下面是我想出来的函数:

public function is_path_valid($path) {
  if (!preg_match('/'/'/[A-Za-z0-9'-_'.]+.*[A-Za-z0-9'-_'.]$/',$path) ) {
       return false;
  }
  return true;
}

是不正确的。谁能指出这里有什么问题吗?

您使用的模式匹配:

  • '/'/[A-Za-z0-9'-_'.]+ //后至少有一个[A-Za-z0-9'-_.]。但是,它可以匹配字符串中的任何地方,不一定是开头。
  • .*中间允许有任何文字。这不是你想要的,对吧?
  • [A-Za-z0-9'-_'.]$以其中一个字符结束(该部分看起来不错)。

下面是你应该验证的内容:

  • ^// //开头(注意^匹配行首的位置)。
  • [-.'w]+ 后跟一个或多个-_.A-Za-z0-9 ('w[A-Za-z0-9_]的简写)
  • (?:/[-.'w]+)* 后接/和与之前相同的字符,重复0次或以上(注意(?: ..)是非捕获组,量词*重复整个组)。
  • $ 直到行尾。

正则表达式:

if (!preg_match('~^//[-.'w]+(?:/[-.'w]+)*$~',$path) ) {
    <
  • regex101演示/kbd>