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

时间:2013-07-23 16:38:44

标签: regex

我在使用正则表达式时遇到了麻烦。希望有人可以帮助或指出正确的方向。基本上我要验证路径结构。

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

  1. (包括正斜杠)以/ usersname /
  2. 开头
  3. 必须只出现一次/ usersname /
  4. 在一次出现/ usersname之后,必须只有一个[aphanumeric-_ space] .xml
  5. 例如,以下是我方法中的有效输入:

    • /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}

    希望有人能帮忙..?

    非常感谢

1 个答案:

答案 0 :(得分:2)

这对我的测试用例起作用了:

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

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

打破这个......

  • ^ - 字符串开头
  • \/username\/ - /
  • 附带的文字用户名
  • (?!.*\/) - 否定前瞻:确保字符串的其余部分不包含其他/
  • (\w|\s|-)+ - 一个或多个字母,数字,空格,_-
  • \.xml - 文字.xml
  • $ - 字符串结尾

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

(?!)做同样的事情,但检查指定的模式是否存在。它被称为负向前瞻。因此,在上面的正则表达式中,(?!.*\/)查找.*\/模式,这意味着“任意或零个字符后跟斜杠”。如果它找到了这个,例如在字符串/username/another_username/whatever.xml中,则匹配将不会成功(因为前瞻是否定)。