警告:preg_Match()[unction.preg-Match]:编译失败:在偏移量上没有重复内容

2022-03-29 00:00:00 regex php preg-match

我正在尝试将preg_Match检查从url检查更改为用户名检查,这是可以接受的最小/最大2-16个字符、破折号、空格和符号。我收到此错误

警告:preg_Match()[unction.preg-Match]:编译失败:在偏移量14处没有重复的内容

if(empty($string) || preg_match("#^([w- ]{2,16}*(?:.[w- ]{2,16}*)+):?(d+)?/?#i", $string))

查找URL的旧代码

if(empty($string) || preg_match("#^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?#i", $string))

解决方案

问题在这里:

[w- ]{2,16}*

不能同时使用{2,16}*,只能使用其中一个。

如果您希望匹配2到16组[w- ]至少0次,请将其包装在子模式中并将*附加到外部:

(?:[w- ]{2,16})*

相关文章