Вопрос о том, как найти все совпадения, когда они могут перекрываться, был задан в Перекрывающихся совпадений в регулярном выражении . Однако, насколько я понимаю, ответы там не охватывают более общий случай.
Как найти все подстроки, которые начинаются с "a"
и заканчиваются "z"
? Например, для "akzzaz"
он должен найти "akz"
, "akzz"
, "az"
и "akzzaz"
.
Поскольку в одной и той же позиции может быть несколько совпадений ("akz"
и "akzz"
), а также может быть несколько совпадений в одной и той же позиции ("az"
и "akzzaz"
) Я не вижу, как помогает использование lookahead или lookbehind, как в упомянутой ссылке. (Также имейте в виду, что в общем случае "a"
и "z"
могут быть более сложными регулярными выражениями)
Я использую C #, поэтому, если это имеет значение, можно использовать любую функцию, специфичную для регулярных выражений .Net.