验证以filename.xml结尾的路径结构



我在使用正则表达式时遇到问题。希望有人能帮助或指出正确的方向。从本质上讲,我必须验证路径结构。

有效输入我的方法的规则是:

  1. (包括正斜杠)以/usersname/开头
  2. 必须仅出现/usersname/一次
  3. 在/usersname/出现一次之后,必须只有一个[aphnumeric-space].xml

例如,以下是我的方法的有效输入:

  • /norrisc/thesf6457.xml
  • /norrisc/thess63-57.xml
  • /norrisc/thqsf64-57 gdhy.xml
  • /norrisc/ase45tg_3.xml

并且以下是*in*方法的有效输入:

  • /norrisc/anotherFolder/thesf6457.xml
  • /norrisc/norrisc/thess63-57.xml
  • /norrisc/norrisc/thess63-57.txt
  • /norrisc/norrisc/thess63-57
  • /norrisc/thqsf64-57 gdhy.xml/kjhfsd.xml

到目前为止我的努力(没有结果)是。。

  • b[/username/]{1}^[a-zA-Z0-9_\s-]+$.xml
  • ^[/username/]{1}[a-zA-Z0-9_\s-]+$.xml{1}
  • b/username/{1}[a-zA-Z0-9_\s-]+$.xml{1}

希望有人能帮忙?

非常感谢

这对我的测试用例有效:

^/username/(?!.*/)(w|s|-)+.xml$

其中username显然是字面上的用户名或包含它的变量

把它分解。。。

  • ^-字符串的开头
  • /username/-用/括起来的文字用户名
  • (?!.*/)-负前瞻:确保字符串的其余部分不包含另一个/
  • (w|s|-)+-一个或多个字母、数字、空格、_-
  • .xml-文字.xml
  • $-字符串末尾

如果您不熟悉lookahead,(?=)结构允许您使用零宽度断言进行匹配。例如,(?=a)会尝试识别a字符,但不会将其作为匹配的一部分(这就是"零宽度"的含义——^$是零宽度断言的其他示例)。这被称为正向前瞻,在某种意义上可以让您"跳过"字符。

(?!)执行相同的操作,但检查指定的模式是否存在。这被称为负面展望。因此,在上面的正则表达式中,(?!.*/)查找.*/模式,这意味着"后面跟着斜杠的任何或零个字符"。如果它发现了这一点,例如在字符串/username/another_username/whatever.xml中,匹配将不会成功(因为前瞻是)。

最新更新