警告:preg_match()[function.preg-match]:编译失败:偏移量为7的字符类中的无效范围

时间:2014-09-29 15:41:18

标签: php regex preg-replace preg-match

我刚刚遇到与Colin Verot's upload script上传课程相关的问题。

/^([\.-\w]+)\/([\.-\w]+)(.*)$/i

我已将其转义如下,但我对preg_match / preg_replace的了解有限,只是想确认正确的“修复”。

/^([\.\-\w]+)\/([\.\-\w]+)(.*)$/i

投递问题的行数介于2899和3012之间

1 个答案:

答案 0 :(得分:2)

您的修复是正确的。 [\.-\w]是一个字符类,连字符尝试执行范围(即[0-9][a-z])。 \w已成为[a-zA-Z0-9_]的简写,因此您无法说出从.\w的范围。但是,我会让角色类看起来像这样:

[\w.-]

这段时间不需要转义,因为它在字符类中没有特殊含义(外部需要转义,因为它意味着"任何字符")。连字符也不需要转义,只要它是字符类的第一个或最后一个字符(即不是范围)。