2010-06-30 2 views
1

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

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

но при попытке это на RegexBuddy, я вижу, что он соответствует только «Cay». Может ли кто-нибудь найти проблему?

спасибо, Mishal

+0

Игнорировать Грабовский .. его выражение будет также соответствовать Caby. –

ответ

3

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

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*)? является избыточной.

+0

спасибо, что работает :) – mishal153

1

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

ca(?:bb|tt)?y 
1

с неловушечности группы

ca(?:bb|tt)?y 

или простой без

ca(bb|tt)?y 
+0

Это будет ловить BB, BT, TB и TT. Не только BB и TT. –

+0

Спасибо, за указание. Я изменил свое регулярное выражение. – jigfox

Смежные вопросы