Вы должны правильно считать скобки:
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*)?
является избыточной.