前瞻性的前瞻性究竟是什么?

时间:2015-03-19 22:56:19

标签: php regex

这是我的表达:

/^(?=.*[a-zA-Z])[A-Za-z0-9\'\s]{2,50}$/m

有人能提供一个可以匹配的例子吗?我认为?=.*[a-zA-Z]意味着字符串的开头。

1 个答案:

答案 0 :(得分:1)

前瞻(作为后视)只是对字符串中某个位置的测试。它不消耗字符,这就是它被称为零宽度断言的原因。

(?=.*[a-zA-Z])表示&#34;后跟零个或多个字符,但换行符(默认情况下点不匹配换行符)和ascii字母&#34;。< / p>

由于前瞻是在字符串锚 ^开始之后,这意味着测试是从字符串中的这个位置执行的(所以字符串的开头) )直到行结束(如果测试成功的行中有一个字母)

因此,如果该行中没有ascii字母,则整个模式将失败,因为此测试失败。

此特定模式中这一前瞻的目标是确保至少有一个字母,因为^[A-Za-z0-9\'\s]{2,50}$ (所以相同但没有此测试)可能允许使用{{em>这样的字符串1}}或"'''''''''''''"" "没有任何字母。

除此之外,可以用这种方式编写模式以获得更好的性能:

" 123 ''123 1237 "

^(?=[A-Za-z0-9\'\s]{2,50}$)[0-9\'\s]*+[A-Za-z0-9\'\s]+

注意:请注意确保单引号前的反斜杠(除非模式位于单引号字符串中)