我有以下的正则表达式:为什么量词不起作用
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
现在我需要用25个字来限制总字符串长度: 我试过如下:
^((?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?){0,25}$
但仍然匹配超过25个字符的正则表达式,为什么?
我有以下的正则表达式:为什么量词不起作用
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
现在我需要用25个字来限制总字符串长度: 我试过如下:
^((?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?){0,25}$
但仍然匹配超过25个字符的正则表达式,为什么?
量词被应用于它之前的标记。就你而言,这是一个完整的组,而且该组可以匹配比单个字符更多的内容。
单独执行长度检查,使用positive lookahead assertion:
^(?=.{0,25}$)(?:\w+\/)?\[email protected]\w+\.\w+$
正如你所看到的,您正则表达式也可以简化颇有几分(无需懒惰量词和字符类)。
谢谢,我现在明白了这个问题。我做了量词'{2}'并复制了字符串,所以它匹配了,我明白你的意思。一个问题,你为什么放弃懒惰量词? –
当你真的需要贪婪的量词时,你不需要懒惰的量词。 –
@WiktorStribiżew,谢谢,但我不明白为什么我需要贪婪的人在这里。你能详细说明吗? –
何不干脆
if (inputStr.length <= 25 && /^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$/.test(inputStr))
{
//your logic
}
表现明智,'长度'检查应该首先。 –
@JamesDonnelly同意,发了更改 – gurvinder372
如果我们称之为原正则表达式一个
^(?:[\w]+?\/)?[\w][email protected][\w]+?\.[\w]+?$
然后你的下一个正则表达式可以更简单地表达
^(A){0,25}$
所以你不只匹配25个字符,你匹配A
0到25次
你可以发布一些匹配或不匹配的例子吗? –
匹配0到25次出现的内容() –
为什么不能简单地检查字符串的长度是否小于或等于25? – gurvinder372