如何识别Perl中字符串中的Windows文件路径?

时间:2010-09-21 15:46:11

标签: windows regex perl path

我一直在搜索一个正则表达式,可以作为规则禁止用户输入Windows文件路径而不转义“\”。到目前为止,我已经找到了这个表达式

  

[^ \\] * $

但是,以下内容失败:

  

C:\\ Program Files \\ testing

失败我的意思是它不验证这个字符串。任何帮助将不胜感激,是的,我一定会使用正则表达式。

2 个答案:

答案 0 :(得分:4)

^(\\\\|[^\\])*$

将匹配仅包含转义的\字符或非\个字符的字符串。 (为了获得额外的性能,您可以将其改进为:^(?:\\\\|[^\\]+)*$

Perl:

if ($subject =~ m/^(?:\\\\|[^\\]+)*$/) {
    # Successful match
} else {
    # Match attempt failed
}

这将匹配

C:\\Program Files\\test
abcd
h983475iuh 87435v z 87tr8v74
\\\\\\\\\\

并失败

C:\Program Files\test
\
\\\

答案 1 :(得分:2)

如果您作为应用程序的用户将此技巧拉到我身上,我会非常恼火。为什么不强制用户以某种格式提供数据,而是在用户输入数据后重新格式化数据?

查看quotemeta函数(perldoc -f quotemeta),它将自动转义所有反斜杠(以及其他可能特殊的字符)。