我一直在搜索一个正则表达式,可以作为规则禁止用户输入Windows文件路径而不转义“\”。到目前为止,我已经找到了这个表达式
[^ \\] * $
但是,以下内容失败:
C:\\ Program Files \\ testing
失败我的意思是它不验证这个字符串。任何帮助将不胜感激,是的,我一定会使用正则表达式。
答案 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),它将自动转义所有反斜杠(以及其他可能特殊的字符)。