确定我得到从正则表达式食谱这个例子先行混乱
^(?=.{3}$).*
正则表达式以上是使用限制的任意图案
的长度如果我再次“AAABBB”测试,它完全失败
从我的理解它寻找一个任意字符3 length.SO之前应该符合“BBB”,但它不是
一个问题,寿任何字符ld lookbehind遵循这种模式x(?= x)
确定我得到从正则表达式食谱这个例子先行混乱
^(?=.{3}$).*
正则表达式以上是使用限制的任意图案
的长度如果我再次“AAABBB”测试,它完全失败
从我的理解它寻找一个任意字符3 length.SO之前应该符合“BBB”,但它不是
一个问题,寿任何字符ld lookbehind遵循这种模式x(?= x)
这实际上是一个前瞻断言而不是后置断言。 ^在字符串的起始处锚定匹配,然后声明字符串的开头必须跟着3个字符,后面跟着字符串的结尾。
编辑:我应该可能已经提到,*末尾用于匹配这三个字符,因为前瞻断言不会消耗任何字符。
你的意思是不消耗任何字符? – slier 2010-08-16 18:35:12
我的意思是,在完成lookahead断言之后,正则表达式引擎继续比较它进入lookahead的点的字符串。所以给定模式'^(?= foo)(。*)$'和输入'foobar'由捕获组1捕获的值将是'foobar'。该模式将首先执行向前看,即检查字符串的开始是否为foo,然后它将移到'。*'上,因为lookahead不消耗任何字符,这意味着与。*匹配的第一个字母是然后等到它捕捉到'foobar' – 2010-08-16 18:43:34
从我的理解是寻找那些在length.SO任何字符3之前,应该符合“BBB”,但它不是
都能跟得上任何字符!让我们来仔细看看...
^ # The caret is an anchor which denotes "STARTS WITH"
(?= # lookahead
. # wildcard match; the . matches any non-new-line character
{3} # quantifier; exactly 3 times
$ # dollar sign; I'm not sure if it will act as an anchor but if it did it would mean "THE END"
) # end of lookbehind
. # wildcard match; the . matches any non-new-line character
* # quantifier; any number of times, including 0 times
几个问题:
.*
是字符串中的第一个字符,然后你想回顾后他们之间sandwhiched字符开始^
和第一个字符.*
。.{3}
实际上意味着任何三个字符,任何字符重复三次;)你真的想知道How can I find repeated letters with a Perl regex?
你所使用的先行断言,因为它看起来在那个还没有消耗字符。后顾断言会查看已经消耗的字符。 – Gumbo 2010-08-16 18:22:33
但是你究竟想要完成什么? – Gumbo 2010-08-16 18:22:55
编辑:限制任意模式的长度 – slier 2010-08-16 18:27:40