我在使用正则表达式时遇到了麻烦。希望有人可以帮助或指出正确的方向。基本上我要验证路径结构。
我的方法的有效输入规则是:
例如,以下是我方法中的有效输入:
/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}
希望有人能帮忙..?
非常感谢
答案 0 :(得分:2)
这对我的测试用例起作用了:
^\/username\/(?!.*\/)(\w|\s|-)+\.xml$
其中username
显然是文字用户名或包含它的变量。
打破这个......
^
- 字符串开头\/username\/
- /
(?!.*\/)
- 否定前瞻:确保字符串的其余部分不包含其他/
(\w|\s|-)+
- 一个或多个字母,数字,空格,_
或-
\.xml
- 文字.xml
$
- 字符串结尾如果您不熟悉前瞻,(?=)
结构可让您使用零宽度断言进行匹配。例如,(?=a)
会尝试识别a
字符,但不会将其作为匹配的一部分包含在内(这是“零宽度”的含义 - ^
和$
是零宽度断言的其他例子)。这被称为正向前瞻,并允许您在某种意义上“跳过”字符。
(?!)
做同样的事情,但检查指定的模式是否不存在。它被称为负向前瞻。因此,在上面的正则表达式中,(?!.*\/)
查找.*\/
模式,这意味着“任意或零个字符后跟斜杠”。如果它找到了这个,例如在字符串/username/another_username/whatever.xml
中,则匹配将不会成功(因为前瞻是否定)。