Регулярное выражение: повторяющееся совпадение с одним и тем же символом - PullRequest
1 голос
/ 30 июня 2010

Я практиковал регулярные выражения и пытался написать регулярное выражение, которое будет определять "cay" и "cabby", а также "catty".Я чувствую, что это правильно:

ca(([bt])\1*)?y 

но, пробуя это на RegexBuddy, я вижу, что это соответствует только "cay"Кто-нибудь может найти проблему?

спасибо, Мишаль

Ответы [ 3 ]

3 голосов
/ 30 июня 2010

Вы должны правильно считать скобки:

ca(([bt])\2)?y 

будет захватывать cay, cabby, catty.

Проще:

ca(bb|tt)?y

явно захватит cay, cabby, catty.


PS: Я думал, что количественное определение обратных ссылок (как в \2*) было невозможно, но на самом деле это так. Если вы хотите сопоставить любое количество только "t" или только "b", все будет в порядке:

ca(([bt])\2*)?y 

соответствует cay, caby, cabby, cabbbbbbbbbbbbbbbbbbbby, catttty и т. Д. Его можно упростить до эквивалента:

ca([bt])\1*y 

потому что такая конструкция (x*)? является избыточной.

1 голос
/ 30 июня 2010

с группой без захвата

ca(?:bb|tt)?y

или проще без

ca(bb|tt)?y
1 голос
/ 30 июня 2010

Это должно сделать трюк без обратных ссылок:

ca(?:bb|tt)?y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...