如何 preg_match return 1
How preg_match return 1
无法创建这种类型的正则表达式 xx.xx.xxx,
其中 x - 可以是任何寄存器或数字的任何拉丁文或俄文字符。但是必须有2个符号,那么点=>2个符号=>点=>3个字符
做了以下表达式-
var_dump(preg_match('/^([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}.([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}.([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){3}$/u', 'd1.df.dfd'));
表达式工作正常,但如果你在末尾删除 1 个字符,例如 d1.df.df,它 returns 1,虽然它应该是 0。请告诉我问题是什么?
([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}
模式部分匹配 0 个或多个从 а
到 я
的字母,然后是 0+ 个字符 А
到 Я
,等等。所有可以匹配 0 次或多次(请参阅 )
之后的 *
量词创建 repeated capturing group,因此,捕获始终仅包含空字符串)。
你需要的是 "merge" 每个组内的所有字符 class 为单个字符 class,并将限制量词应用于 class:
'~^([а-яА-ЯA-Za-zёЁ0-9]{2})\.([а-яА-ЯA-Za-zёЁ0-9]{2})\.([а-яА-ЯA-Za-zёЁ0-9]{3})$~u'
使用不区分大小写的修饰符,它会更短一些:
'~^([а-яa-zё0-9]{2})\.([а-яa-zё0-9]{2})\.([а-яa-zё0-9]{3})$~ui'
此外,您可以使用子程序缩短模式:
'~^(([а-яa-zё0-9]){2})\.((?2){2})\.((?2){3})$~ui'
参见 another regex demo。 Herem (?2)
重复捕获组 #2 中的模式,([а-яa-zё0-9])
。
无法创建这种类型的正则表达式 xx.xx.xxx, 其中 x - 可以是任何寄存器或数字的任何拉丁文或俄文字符。但是必须有2个符号,那么点=>2个符号=>点=>3个字符 做了以下表达式-
var_dump(preg_match('/^([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}.([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}.([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){3}$/u', 'd1.df.dfd'));
表达式工作正常,但如果你在末尾删除 1 个字符,例如 d1.df.df,它 returns 1,虽然它应该是 0。请告诉我问题是什么?
([а-я]*[А-Я]*[A-Z]*[a-z]*ё*Ё*[0-9]*){2}
模式部分匹配 0 个或多个从 а
到 я
的字母,然后是 0+ 个字符 А
到 Я
,等等。所有可以匹配 0 次或多次(请参阅 )
之后的 *
量词创建 repeated capturing group,因此,捕获始终仅包含空字符串)。
你需要的是 "merge" 每个组内的所有字符 class 为单个字符 class,并将限制量词应用于 class:
'~^([а-яА-ЯA-Za-zёЁ0-9]{2})\.([а-яА-ЯA-Za-zёЁ0-9]{2})\.([а-яА-ЯA-Za-zёЁ0-9]{3})$~u'
使用不区分大小写的修饰符,它会更短一些:
'~^([а-яa-zё0-9]{2})\.([а-яa-zё0-9]{2})\.([а-яa-zё0-9]{3})$~ui'
此外,您可以使用子程序缩短模式:
'~^(([а-яa-zё0-9]){2})\.((?2){2})\.((?2){3})$~ui'
参见 another regex demo。 Herem (?2)
重复捕获组 #2 中的模式,([а-яa-zё0-9])
。