Java windows路径的正则表达式
作为强化修复的一部分,我们需要验证文件路径。比如说,Java windows路径的正则表达式,java,regex,Java,Regex,作为强化修复的一部分,我们需要验证文件路径。比如说, “C:/Users//sample1.txt” “C:\Users\\sample1.txt” 我们已经尝试使用下面的正则表达式来验证上述路径,但当文件路径包含\时,我们以错误告终。 因此,请建议可以接受文件路径中两个斜杠的有效正则表达式 Validator.FilePath=.*[\\]\\[!"#$%&'()_*+,/:;<=>?@\\^`{|}~].* Validator.FilePath=.[\\]\\[!“\\
“C:/Users//sample1.txt”
“C:\Users\\sample1.txt”
\
时,我们以错误告终。
因此,请建议可以接受文件路径中两个斜杠的有效正则表达式
Validator.FilePath=.*[\\]\\[!"#$%&'()_*+,/:;<=>?@\\^`{|}~].*
Validator.FilePath=.[\\]\\[!“\\$%&'()\*+,/:;?@\\\^`{124;}~]*
您可以尝试:
[a-zA-Z]:[\\\/](?:[a-zA-Z0-9]+[\\\/])*([a-zA-Z0-9]+\.txt)
表示驱动器号,而[a-zA-Z]:
:
以匹配[\\\/]
或\
/
用于文件夹名称。您可以在字符类中添加可能需要的任何字符。我只使用了(?:[a-zA-Z0-9]+[\\/])*
a-zA-Z0-9
用于文件名和([a-zA-Z0-9]+\.txt)
扩展名-它将文件名与扩展名匹配并捕获它.txt
[a-zA-Z]:[\\\/](?:[a-zA-Z0-9]+[\\\/])*([a-zA-Z0-9]+\.txt)
表示驱动器号,而[a-zA-Z]:
:
以匹配[\\\/]
或\
/
用于文件夹名称。您可以在字符类中添加可能需要的任何字符。我只使用了(?:[a-zA-Z0-9]+[\\/])*
a-zA-Z0-9
用于文件名和([a-zA-Z0-9]+\.txt)
扩展名-它将文件名与扩展名匹配并捕获它.txt
^
(?<drive>[a-z]:)?
(?<path>(?:[\\]?(?:[\w !#()-]+|[.]{1,2})+)*[\\])?
(?<filename>(?:[.]?[\w !#()-]+)+)?[.]?
$
^
(?[a-z]:)?
(?(?:[\\]?(?:[\w!#()-]+.[.]{1,2})+*[\\])?
(?(?:[.]?[\w!#()-]+)?[.]?
$
它容纳存在或不存在的驱动器号、可选根标记、相对路径(“.”和“.”),以及文件和文件夹名称中的句点。通过捕获组标签,提取该信息也变得简单/容易。唯一需要注意的是,它需要对传递的路径名中的双句点进行二次检查
FWIW,这是我多年来用来验证任何有效Windows路径+文件的模式:
^
(?<drive>[a-z]:)?
(?<path>(?:[\\]?(?:[\w !#()-]+|[.]{1,2})+)*[\\])?
(?<filename>(?:[.]?[\w !#()-]+)+)?[.]?
$
^
(?[a-z]:)?
(?(?:[\\]?(?:[\w!#()-]+.[.]{1,2})+*[\\])?
(?(?:[.]?[\w!#()-]+)?[.]?
$
它容纳存在或不存在的驱动器号、可选根标记、相对路径(“.”和“.”),以及文件和文件夹名称中的句点。通过捕获组标签,提取该信息也变得简单/容易。唯一需要注意的是,它需要对传递的路径名中的双句点进行二次检查
以下是我的解决方案:
^(?i)\s*([a-z]:/?)?(?:[^?*:;|<>\r\n\\]*)(/\1*|\1*)(.\1*)*[^.]$
但不是:
C:notepad++/notepad++/notepad++.exe.txt.
以下是我的解决方案:
^(?i)\s*([a-z]:/?)?(?:[^?*:;|<>\r\n\\]*)(/\1*|\1*)(.\1*)*[^.]$
但不是:
C:notepad++/notepad++/notepad++.exe.txt.
您是否只想检查路径是否有效或它是否实际存在?在后一种情况下,我只需创建一个新的
文件
对象,并让框架处理路径转换。在前一种情况下,您可以执行类似的操作,但要迭代父层次结构并检查每个父级,直到达到特定条件。-Alte实际上,你可以看看像ApacheCommons IO这样的库,它们通常都有路径相关的实用程序。你试过这样的方法吗:-.*(\/\\).*(\\\\/)[!“\$%&'(),\/:?\\\\\\^`{124}].私有ESAPIValidationUtils(){}公共静态字符串getValidFilePath(String reqParam){String validFileName=“”;尝试{if(null!=reqParam{validFileName=ESAPI.validator().getValidInput(“文件路径:”,reqParam,“文件路径”,256,true);}}catch(ValidationException ex){Log.error(“com.dextersystems.util.ESAPIValidationUtils”,“getValidFilePath()”,ex);}返回validFileName;}您是否只想检查路径是否有效或它是否实际存在?在后一种情况下,我只需创建一个新的文件
对象,并让框架处理路径转换。在前一种情况下,您可以执行类似的操作,但要迭代父层次结构并检查每个父级,直到达到特定条件。-Alte实际上,你可以看看像ApacheCommons IO这样的库,它们通常都有路径相关的实用程序。你试过这样的方法吗:-.*(\/\\).*(\\\\/)[!“\$%&'(),\/:?\\\\\\^`{124}].私有ESAPIValidationUtils(){}公共静态字符串getValidFilePath(String reqParam){String validFileName=“”;尝试{if(null!=reqParam{validFileName=ESAPI.validator().getValidInput(“文件路径:”,reqParam,“文件路径”,256,true);}}catch(ValidationException ex){Log.error(“com.dextersystems.util.ESAPIValidationUtils”,“getValidFilePath()”,ex);}返回validFileName;}试着解释一下你的解决方案。不满足我上面看到的任何测试。试着解释一下你的解决方案。不满足我上面看到的任何测试。看起来不错,但它没有覆盖相反的斜线。@Dariusz--嗯,这是因为,正如开头行所述,它最初严格用于验证Windows路径和I j我们不在乎Windows最近添加了自动unix语法插值。不过,如果您觉得绝对需要添加对unix路径的支持,那么这是一个非常简单/明显/直接的修改…并不能满足很多变化:例如。“+允许在文件名中使用“,”以及其他一些字符。允许使用多个连续点。等等。“加号”是一个特殊字符(用于文件连接)在DOS 8.3文件名中,它也是根据最佳实践允许在文件名中使用的各种错误字符之一。同样,允许连续句点会导致路径误用,也与最佳实践相反,我对允许任何一种都不感兴趣。不过,如果您不明确根据最佳实践,并希望接受比我更多的字符,模式很容易修改…看起来不错,但它没有覆盖相反的斜杠。@Dariusz--嗯,这是因为,作为开场白