PHP Windows 目录的正则表达式 - preg_match

PHP Regex for Windows Directory - preg_match

我需要根据 Windows 验证目录的用户文本条目,没有排序的目录选择器,它只是一个文本字段。

我使用 http://regex101.com/ 编写了以下正则表达式,它足以满足我的需要:

^[a-zA-Z]\:[\/,\].{1,}

这将匹配例如在线工具中的以下目录:

C:/Users/Charlie/Dropbox
D:/Users/Bob/Quotes
F:/Quotes

问题是,在我的应用程序中使用它时,preg_match 与以上任何一项都不匹配。它不 return 真,preg_last_error() returns 0 也表示假 return 值。

使用的确切代码是:

if(preg_match('/^[a-zA-Z]\:[\/,\].{1,}/', $directory)) { }

非常感谢任何帮助。

您需要在此处使用四重反斜杠来匹配文字反斜杠:

if(preg_match('/^[a-zA-Z]\:[\/,\\].{1,}/', 'C:/Users/Charlie/Dropbox')) {
//                             ^^^^

IDEONE demo

否则,反斜杠只是对 ] 进行转义,这会破坏正则表达式字符 class.

请注意,您可以只使用 + 量词代替 {1,},这意味着 1 次或多次出现 ,并且您不必转义冒号.

我也不明白为什么你在字符class中有一个逗号,该字符被视为文字。我认为您只想将 \/[\/,\\] 匹配?然后,整个正则表达式看起来像

'/^[a-zA-Z]:[\/\\].+/'

another demo