代码之家  ›  专栏  ›  技术社区  ›  Woot4Moo

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

  •  1
  • Woot4Moo  · 技术社区  · 14 年前

    我一直在搜索一个regex,它可以作为一个规则来禁止用户在不转义\的情况下输入Windows文件路径。到目前为止,我发现了这个表达方式

    [^ \\]*$

    但是,这对于以下情况是失败的:

    C:\\程序文件\\测试

    “失败”是指它不验证该字符串。任何帮助都将非常感谢,是的,我一定会使用regex。

    2 回复  |  直到 9 年前
        1
  •  4
  •   Tim Pietzcker    14 年前
    ^(\\\\|[^\\])*$
    

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

    在Perl中:

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

    这个会匹配的

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

    并且失败了

    C:\Program Files\test
    \
    \\\
    

    等。

        2
  •  2
  •   Ether    14 年前

    如果作为应用程序的用户,你对我耍了这个花招,我会很生气的。为什么不强制用户以某种格式提供数据,而是在用户输入数据后重新格式化数据?

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