7

我有以下正则表达式:

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

我理解这一点的方式是它将接受 8 个任何类型的字符,然后是 1 个或多个任何字符。我觉得我没有掌握积极前瞻的工作原理。因为正则表达式的两个部分都在寻找“。” 没有任何系列的角色适合这个吗?

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

在以下正则表达式工具中提供时,以下内容不匹配:

  • 123456781
  • (12345678)1
  • (12345678)
  • (abcdefgh)a
  • (abcdefgh)
  • 美国广播公司
  • 123

编辑:删除了前两个数据条目,因为我显然没有正确使用正则表达式工具,因为它们现在正好匹配 8 个字符。

4

3 回答 3

10

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

将匹配字符串

aaaaaaaa

推理:

括号内的内容是先行内容,因为它以?=.

前瞻内的内容被解析 - 它不是字面解释的。

因此,前瞻仅允许正则表达式匹配 if.{8}$将匹配(在这种情况下,在字符串的开头)。所以字符串必须正好是八个字符,然后它必须结束,如$.

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

于 2013-04-24T01:37:27.290 回答
6

它试图匹配:

^               # 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
于 2013-04-24T01:36:56.407 回答
0

匹配 12345678 在 ruby​​ 中有效:

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

也许您的测试站点不支持正则表达式的前瞻性?

于 2013-04-24T01:39:37.140 回答