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
^ # 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