Мне всегда казалось, что вы не можете использовать кванторы повторения в утверждениях с нулевой шириной (Perl Compatible Regular Equions [PCRE]). Однако недавно я понял, что вы можете использовать их в ожидании утверждений.
Итак, мой вопрос:
Как работает механизм регулярных выражений PCRE при поиске с нулевой шириной, который исключает использование кванторов повторения?
Вот простой пример из PCRE в R:
# Our string
x <- 'MaaabcccM'
## Does it contain a 'b', preceeded by an 'a' and followed by zero or more 'c',
## then an 'M'?
grepl( '(?<=a)b(?=c*M)' , x , perl=T )
# [1] TRUE
## Does it contain a 'b': (1) preceeded by an 'M' and then zero or more 'a' and
## (2) followed by zero or more 'c' then an 'M'?
grepl( '(?<=Ma*)b(?=c*M)' , x , perl = TRUE )
# Error in grepl("(?<=Ma*)b(?=c*M)", x, perl = TRUE) :
# invalid regular expression '(?<M=a*)b(?=c*M)'
# In addition: Warning message:
# In grepl("(?<=Ma*)b(?=c*M)", x, perl = TRUE) : PCRE pattern compilation error
# 'lookbehind assertion is not fixed length'
# at ')b(?=c*M)'