我有以下正则表达式:
^(?=.{8}$).+
我理解这一点的方式是它将接受任何类型的角色中的8个,其后是任何一个或多个角色。我觉得我并没有理解积极前瞻是如何运作的。因为正则表达式的两个部分都在寻找'。'不会有任何一系列角色适合这个吗?
我的问题是,正面前瞻如何影响这个正则表达式以及匹配字符串的示例是什么?
以下regex tool中提供的内容与以下内容不匹配:
编辑:删除了前两个数据条目,因为我显然没有正确使用正则表达式工具,因为它们现在匹配正好8个字符。
答案 0 :(得分:8)
^(?=.{8}$).+
将匹配字符串
aaaaaaaa
推理:
括号内的内容是先行,因为它以?=
开头。
前瞻内部的内容被解析 - 它不是按字面解释的。
因此,前瞻只允许正则表达式匹配,如果.{8}$
匹配(在这种情况下,在字符串的开头)。所以字符串必须正好是八个字符,然后它必须结束,$
证明了这一点。
然后。+将匹配这8个字符。
答案 1 :(得分:6)
它试图匹配:
^ # start of line, but...
(?=.{8}$) # only if it precedes exactly 8 characters and the end of line
.+ # this one matches those 8 caharacters
并且根据您的输入,它也应匹配这些(try this engine并在检查换行符时匹配):
12345678
abcdefgh
答案 2 :(得分:0)
匹配12345678适用于ruby:
'12345678' =~ /^(?=.{8}$).+/
=> 0
也许您的测试网站不支持在regexp上展望未来?