积极的前瞻正则表达

时间:2013-04-24 01:31:41

标签: regex

我有以下正则表达式:

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

我理解这一点的方式是它将接受任何类型的角色中的8个,其后是任何一个或多个角色。我觉得我并没有理解积极前瞻是如何运​​作的。因为正则表达式的两个部分都在寻找'。'不会有任何一系列角色适合这个吗?

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

以下regex tool中提供的内容与以下内容不匹配:

  • 123456781
  • (12345678)1
  • (12345678)
  • (ABCDEFGH)一个
  • (ABCDEFGH)
  • ABC
  • 123

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

3 个答案:

答案 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上展望未来?