我正在处理的应用程序中的一个HTML输入字段正在使用以下正则表达式模式进行验证:
.{5,}+
这是什么检查?
正在使用此模式检查其他字段,我也不明白:
.+
答案 0 :(得分:18)
我们可以将您的模式分为三个部分:
dot是一个通配符,它匹配任何字符(默认情况下除了换行符,除非设置了/s
modifier)。
{5,}
在点上指定repetition。它表示点必须至少匹配5次。如果逗号后面有一个数字,那么点必须在5和那个次数之间匹配,但由于没有数字,它可以匹配无限次。
在您的第一个模式中,+
是possessive quantifier(有关+
在不同情况下的不同之处,请参见下文)。它告诉正则表达式引擎一旦满足前一个条件(即.{5,}
),它就不应该尝试回溯。
你的第二种模式更简单。点仍然意味着与上面相同(作为通配符)。但是,这里+
具有不同的含义,并且是重复运算符,这意味着点必须匹配1次或更多次(也可以表示为.{1,}
,如上所述。 / p>
如您所见,+
具有不同的含义,具体取决于上下文。当单独使用时,它是一个重复运算符。但是当它跟随不同的重复运算符(*
,?
,+
或{...}
)时,它就变成了占有量词。
答案 1 :(得分:4)
+
表示另一个量词({5,}
)表示possessive match,即一旦找到匹配,*不会回溯**。
例如,模式.{5,}x
将匹配abcdex
:
.{5,}
匹配abcdex
。x
没有任何匹配。.{5,}
并让它与abcde
匹配。x
与最后x
匹配。但是.{5,}+x
不匹配abcdex
:
.{5,}+
匹配abcdex
。x
没有任何匹配。.{5,}+
。我们必须到此为止。 *:即使模式无法回溯,匹配的字符串仍然可以作为一个整体删除。例如,a?.{5,}x
将匹配{a?
→a
,.{5,}+
→bcdex
,x
→无匹配},然后删除整个.{5,}+
和a
并重新启动{a?
→,
.{5,}+
→abcdex
,x
→无匹配}。因此,我们也可以说+
使量词“原子”。
另一方面,+
仅表示{1,}
,即匹配一次或多次。
答案 2 :(得分:3)
任何角色,5次或更多次。
答案 3 :(得分:3)
.{5,}+
表示
.+
是相同的,但它匹配1和无限次,根据需要回馈(贪婪)。
正如我之前多次提到的,我是RegexBuddy的忠实粉丝。它的“创建”模式非常适合解构正则表达式。