Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式正条件测试_Regex - Fatal编程技术网

Regex 正则表达式正条件测试

Regex 正则表达式正条件测试,regex,Regex,我对密码字段有一个条件要求 它必须介于5到8个字符之间 一个数字至少应为数字 我正在使用: (?=.*\d).{5,8} 现在,令人不安的部分是方法,这里使用的是阳性条件检验,其次是{}之前的点。有人能解释一下吗?正向前瞻是一个定位点:在这里,它将匹配一个位置,下面是一组任意字符(*),后面是一个数字(\d) 从这个位置开始,应该有任何字符(),5到8次({5,8}) 请注意,作为锚定的正向前瞻不会消耗任何角色:这就是它工作的原因。还要注意,正则表达式引擎将始终尝试查找最左边的

我对密码字段有一个条件要求

  • 它必须介于5到8个字符之间
  • 一个数字至少应为数字
  • 我正在使用:

     (?=.*\d).{5,8}       
    

    现在,令人不安的部分是方法,这里使用的是阳性条件检验,其次是{}之前的点。有人能解释一下吗?

    正向前瞻是一个定位点:在这里,它将匹配一个位置,下面是一组任意字符(
    *
    ),后面是一个数字(
    \d

    从这个位置开始,应该有任何字符(
    ),5到8次(
    {5,8}

    请注意,作为锚定的正向前瞻不会消耗任何角色:这就是它工作的原因。还要注意,正则表达式引擎将始终尝试查找最左边的匹配项


    最后,正则表达式也应该锚定在开始和结束处(即,
    ^(?=.*\d)。{5,8}$
    ),否则它可能匹配输入中的任何位置:只要在输入中找到一个数字,原始正则表达式将匹配
    joizjoeijoiu4ijojiar
    ,而不考虑指定的长度(
    {5,8}
    )。前瞻将匹配
    joizjoeijoiu4
    {5,8}
    将匹配
    joizjoei

    您现在的问题是什么?你想解释一下这个表达式吗?为什么不看看“一个数字至少应该是数字”,你在想什么其他数字?好的,解释得很好。我将任意字符(.*)读作“任意字符零次或多次”。那么,在positive lookhead中保存元字符的基本含义是什么呢?@fge…我不能完全理解你的例子@kushal修正了一件事,事实上,未经编排,正则表达式将匹配整个字符串。请记住,正则表达式可以匹配输入中的任何位置。元字符在前瞻中不会失去意义。同样,记住它们匹配一个位置。@fge…现在更清楚一点。现在,考虑到上面的字符串
    joizjoeijoiu4ijojiar
    和正则表达式与
    ^
    $
    锚定符一起使用,我基本上强制正则表达式引擎从第一个字符开始搜索,在这种情况下是
    J
    ?否则它会从输入中的任何地方开始匹配…我做对了吗?正则表达式总是从输入的开头开始。如果在那里没有找到匹配项,它将在下一个字符处进行尝试,依此类推,直到找到匹配项为止。正如您所说,
    ^
    将强制正则表达式引擎在其输入的开始处进行匹配——它不能在其他任何地方进行匹配。类似地,
    $
    强制它查找输入的结尾。