我需要一些在PHP中使用的正则表达式来验证通过表单传递的UNC路径。 它应该是以下格式:
“...并允许进行更深层次的子文件夹。为了保持一致性,去掉末尾的斜杠可能是有必要的,尽管如果需要的话我可以很容易地通过substr函数来完成这个操作。”
“我在网上读到,在PHP中匹配一个反斜杠需要4个反斜杠(使用类C的字符串时),我认为我知道为什么会这样(PHP转义(例如2 = 1,所以4 = 2),然后正则表达式引擎转义(剩余的2 = 1)。我见过以下两种被引用为等效合适的正则表达式来匹配单个反斜杠:”
或者显然也是这样的:
然而,这些会产生不同的结果,而且这与我的最终目的略有不同,即匹配完整的UNC路径。
为了查看是否能匹配两个反斜杠,我使用以下内容进行测试:
上述内容似乎匹配了两个或更多的反斜杠:(模式为8个斜杠,相当于2个,那么为什么输入3个反斜杠($path = "\\\\\\server")也会匹配呢?)
我认为可能以下内容可以解决这个问题:
再一次,没有 :(
请帮帮我,不然我要跳窗口了,哈哈 :)
\\server\something
“...并允许进行更深层次的子文件夹。为了保持一致性,去掉末尾的斜杠可能是有必要的,尽管如果需要的话我可以很容易地通过substr函数来完成这个操作。”
“我在网上读到,在PHP中匹配一个反斜杠需要4个反斜杠(使用类C的字符串时),我认为我知道为什么会这样(PHP转义(例如2 = 1,所以4 = 2),然后正则表达式引擎转义(剩余的2 = 1)。我见过以下两种被引用为等效合适的正则表达式来匹配单个反斜杠:”
$regex = "/\\\\/s";
或者显然也是这样的:
$regex = "/[\\]/s";
然而,这些会产生不同的结果,而且这与我的最终目的略有不同,即匹配完整的UNC路径。
为了查看是否能匹配两个反斜杠,我使用以下内容进行测试:
$path = "\\\\server";
echo "the path is: $path <br />"; // which is \\server
$regex = "/\\\\\\\\\/s";
if (preg_match($regex, $path))
{
echo "matched";
}
else
{
echo "not matched";
}
上述内容似乎匹配了两个或更多的反斜杠:(模式为8个斜杠,相当于2个,那么为什么输入3个反斜杠($path = "\\\\\\server")也会匹配呢?)
我认为可能以下内容可以解决这个问题:
$regex = "/[\\][\\]/s";
再一次,没有 :(
请帮帮我,不然我要跳窗口了,哈哈 :)
$UNC_regex = '=^\\\\[a-zA-Z0-9-]+\\[a-zA-Z0-9`~!@#$%^&(){}'
此后的字符为彩色: .-]+([ ]+[a-zA-Z0-9`~!@#$%^&(){}'.-]+)*$=s';另外,考虑到您所说的,为什么所有这些都报告未匹配?我本以为这将匹配第二个if / else:http://pastebin.com/BSnJrnFQ - Robin~!@#$%^&(){}\'._-]+([ ]+[a-zA-Z0-9
~!@#$%^&(){}'._-]+)*$ =s';才能正常工作吗?(添加了额外的反斜杠)。当我这样做时,它似乎可以工作。 - Robin\\foo\bar
- Kaii