我有一个正则表达式,例如“ ^[a-zA-Z]:(\\\\+[^\\/:*?"<>|]+)*([\\\\]+)?$
”,它负责文件路径验证。
它成功验证了C:\Users\data
和C:\\Users\\data
之类的路径
我希望“ C:\
”后面的字符串不要以空格开头,并且不能包含(^\\/:*?"<>|)
个字符。
答案 0 :(得分:0)
您可以使用match字符串的开头直到冒号,然后使用否定的字符类来立即匹配不想要的字符。您可以在该字符类中添加一个空格或\s
以使其不匹配。
您还可以使用捕获组和向后引用,以哪个变体用于反斜杠\\
或\
之后,您可以使用重复模式并指定允许其余字符串使用的字符。
^[a-zA-Z]:(\\+)(?:[^\\/:*?"<>|\s][\w&]+(?: [\w&]+)*(?:\1[a-zA-Z&]+)*)?$
这将匹配:
^
字符串的开头[a-zA-Z]:
-[a-zA-Z]:
匹配a-zA-Z和冒号(\\+)
在反斜杠中捕获1次以上以引用它(?:
非捕获组
[^\\/:*?"<>|\s]
否定的字符类不等于所列内容的1倍以上(添加了\s
,但您也可以使用空格)[\w&]+(?: [\w&]+)*
匹配单词char的1+次,并重复匹配空格的0+次和单词char的1+次。请注意,您可以扩展字符类以匹配所需的字符。(?:
非捕获组
\1[a-zA-Z&]+
将反向引用与第1组中捕获的内容进行匹配,然后再按1+次a-zA-Z(您也可以将想要匹配的内容添加到字符类中))*
关闭非捕获组并重复0次以上)?
关闭非捕获组并将其设置为可选$
字符串的结尾答案 1 :(得分:0)
如here
如果您想匹配不跟随其他内容的内容,则负向超前是必不可少的。在解释字符类时,本教程说明了为什么不能使用否定的字符类来匹配q后跟u的字符。负前瞻提供了解决方案:q(?!u)
因此,您可以将其与{-{1}}这样的if-then-else正则表达式语句混合使用