Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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,我有以下正则表达式: ^(?=.{8}$).+ 我的理解是,它将接受任何类型字符的8,后跟任何类型字符的1或更多。我觉得我没有领会积极的前瞻是如何运作的。因为正则表达式的两个部分都在寻找“.”,所以任何一系列字符都不能满足这个要求吗 我的问题是,正向前瞻如何影响这个正则表达式,匹配字符串的示例是什么 以下内容在以下情况下提供时不匹配: 123456781 (12345678)1 (12345678) (abcdefgh)a (abcdefgh) abc 123 编辑:删除了前两个数据项,因

我有以下正则表达式:

^(?=.{8}$).+
我的理解是,它将接受任何类型字符的8,后跟任何类型字符的1或更多。我觉得我没有领会积极的前瞻是如何运作的。因为正则表达式的两个部分都在寻找“.”,所以任何一系列字符都不能满足这个要求吗

我的问题是,正向前瞻如何影响这个正则表达式,匹配字符串的示例是什么

以下内容在以下情况下提供时不匹配:

  • 123456781
  • (12345678)1
  • (12345678)
  • (abcdefgh)a
  • (abcdefgh)
  • abc
  • 123
编辑:删除了前两个数据项,因为我显然没有正确使用regex工具,因为它们现在正好匹配8个字符。

它正在尝试匹配:

^               # start of line, but...
(?=.{8}$)       # only if it precedes exactly 8 characters and the end of line
.+              # this one matches those 8 characters
根据您的输入,它还应与以下内容匹配(选中了换行符匹配):

^(?=.{8}$).+

将匹配字符串

aaaaaa

理由:

括号内的内容是前瞻性的,因为它以
?=
开头

前瞻中的内容是解析的,而不是字面上的解释

因此,只有当
{8}$
匹配时(在本例中,在字符串的开头),lookahead才允许正则表达式匹配。因此字符串必须正好是8个字符,然后它必须结束,如
$
所示


然后,+将匹配这八个字符。

匹配12345678在ruby中工作:

'12345678' =~ /^(?=.{8}$).+/ 
=> 0 

也许您的测试站点不支持在regexps上进行前瞻?

测试站点确实支持前瞻,至少在默认设置的.NET版本上是这样。我知道,因为这就是我测试他的正则表达式的方式:)我必须设置了尾随空格或一个不正确的选项,因为我现在得到了这些选项的匹配项。我已经更新了我的问题,以便将来的用户了解。您的正则表达式与
^.{8}$
具有相同的含义。我不明白您为什么要使用前瞻性(除非这是一个更大的正则表达式的一部分)。它是一个为验证程序提供给我的正则表达式,现在我看到它是如何工作的,我也不理解他们的选择!我想这就是最初让我感到不快的地方。为什么要使用正向前瞻技巧而不是直接匹配8个字符,比如:
^。{8}$
'12345678' =~ /^(?=.{8}$).+/ 
=> 0