我正在练习正则表达式,并试图编写一个将检测的正则表达式 “cay”和“cabby”以及“catty”。我觉得这是对的:
ca(([bt])\1*)?y
但是在RegexBuddy上尝试这个,我发现它只匹配“cay”。谁能找到问题呢?
谢谢,Mishal答案 0 :(得分: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*)?
是多余的。
答案 1 :(得分:1)
这应该可以做到没有反向引用的技巧:
ca(?:bb|tt)?y
答案 2 :(得分:1)
使用非捕获组
ca(?:bb|tt)?y
或更简单,没有
ca(bb|tt)?y