匹配特定文件路径正则表达式

时间:2016-02-15 17:06:51

标签: javascript php regex

到目前为止,我有这个正则表达式$fileregex = /([a-z]:\\\\([^\\\\^\\.])*)|(\/[^\/.])/i;,但我对下一步该做什么感到很困惑。

我希望以这种格式匹配字符串

c:\\something\\else\\something
c:\\something\\else\\something.whatever
/etc/whatever/something/here
/etc/here.txt
/
c:\\

但我不想匹配,例如

c:\oneslash\text.txt
\etc\hi

我真的很依赖我的正则表达式,特别是在重复可选路径时,因为可以请求root。任何人都可以帮我解决正则表达式问题吗?

2 个答案:

答案 0 :(得分:1)

这个应该有效:

preg_match_all('%[A-Za-z]:\\\\\\\\(.*?\\\\\\\\)*.*|/(.*?/)*.*%m', $input, $regs, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($regs[0]); $i++) {
    # Matched text = $regs[0][$i];
}

结果:

enter image description here

正则表达式的描述:

                Match either the regular expression below (attempting the next alternative only if this one fails)
    [A-Za-z]        Match a single character present in the list below
                      A character in the range between “A” and “Z”
                      A character in the range between “a” and “z”
    :               Match the character “:” literally
    \\\\              Match the character “\” literally
    \\\\              Match the character “\” literally
    (               Match the regular expression below and capture its match into backreference number 1
      .               Match any single character that is not a line break character
         *?              Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
      \\\\              Match the character “\” literally
      \\\\              Match the character “\” literally
    )*              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
    .               Match any single character that is not a line break character
      *               Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
|               Or match regular expression number 2 below (the entire match attempt fails if this one fails to match)
   /               Match the character “/” literally
   (               Match the regular expression below and capture its match into backreference number 2
      .               Match any single character that is not a line break character
         *?              Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
      /               Match the character “/” literally
   )*              Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
   .               Match any single character that is not a line break character
      *               Between zero and unlimited times, as many times as possible, giving back as needed (greedy)

答案 1 :(得分:0)

你试试这个:

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

此正则表达式将匹配任何有效的文件路径。它检查本地驱动器和网络路径。文件扩展名是必需的。

进一步参考:The regular expression library