1

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

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

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

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

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

.. 和以下是 *in*valid 方法的输入:

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

希望有人可以帮助.. ?

非常感谢

4

1 回答 1

2

这对我的测试用例有用:

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

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

打破它...

  • ^- 字符串的开始
  • \/username\/- 文字用户名由/
  • (?!.*\/)- 负前瞻:确保字符串的其余部分不包含另一个/
  • (\w|\s|-)+- 一个或多个字母、数字、空格_、, 或-
  • \.xml- 字面意思.xml
  • $- 字符串结束

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

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

于 2013-07-23T16:53:05.990 回答