正则表达式,不允许前导空格和(^ \\ /:*?“ <> |)中的任何字符

时间:2019-03-01 12:30:45

标签: regex

我有一个正则表达式,例如“ ^[a-zA-Z]:(\\\\+[^\\/:*?"<>|]+)*([\\\\]+)?$”,它负责文件路径验证。

它成功验证了C:\Users\dataC:\\Users\\data之类的路径

我希望“ C:\”后面的字符串不要以空格开头,并且不能包含(^\\/:*?"<>|)个字符。

2 个答案:

答案 0 :(得分:0)

您可以使用match字符串的开头直到冒号,然后使用否定的字符类来立即匹配不想要的字符。您可以在该字符类中添加一个空格或\s以使其不匹配。

您还可以使用捕获组和向后引用,以哪个变体用于反斜杠\\\

之后,您可以使用重复模式并指定允许其余字符串使用的字符。

^[a-zA-Z]:(\\+)(?:[^\\/:*?"<>|\s][\w&]+(?: [\w&]+)*(?:\1[a-zA-Z&]+)*)?$

Regex demo

这将匹配:

  • ^字符串的开头
  • [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正则表达式语句混合使用