我有以下正则表达式:
^(?=.{8}$).+
我理解这个正则表达式将接受8个任意类型的字符,后跟1个或多个任意字符。我感觉我没有掌握正向先行断言的工作原理。因为正则表达式的两个部分都在寻找'.',所以任何一系列字符都符合这个条件吗?
我的问题是,正向先行断言如何影响这个正则表达式,有哪些匹配字符串的例子?
以下内容在提供的正则表达式工具中未匹配成功:
- 12345678
- (12345678)1
- (12345678)
- (abcdefgh)a
- (abcdefgh)
- abc
- 123
我有以下正则表达式:
^(?=.{8}$).+
^(?=.{8}$).+
aaaaaaaa
方括号内的内容是一个前瞻,因为它以?=
开头。
前瞻内的内容被解析 - 它不是按字面意义解释的。
因此,只有当.{8}$
匹配成功时,前瞻才允许正则表达式进行匹配(在本例中是在字符串开头)。所以该字符串必须恰好有八个字符,然后以$
结尾。
然后.+
将匹配这八个字符。
^.{8}$
? - Paul Razvan Berg它正在尝试匹配:
^ # start of line, but...
(?=.{8}$) # only if it precedes exactly 8 characters and the end of line
.+ # this one matches those 8 characters
根据您的输入,它还应该与这些内容匹配(可以尝试这个引擎并勾选匹配换行符):
12345678
abcdefgh
在 Ruby 中,匹配 12345678 是可行的:
'12345678' =~ /^(?=.{8}$).+/
=> 0
可能你的测试网站不支持正则表达式前瞻?
^.{8}$
有相同的含义。除非这是一个更大的正则表达式的一部分,否则我不明白你为什么要使用 lookahead。 - nhahtdh