正则表达式:重复匹配相同的字符

时间:2010-06-30 08:57:26

标签: regex

我正在练习正则表达式,并试图编写一个将检测的正则表达式 “cay”和“cabby”以及“catty”。我觉得这是对的:

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

但是在RegexBuddy上尝试这个,我发现它只匹配“cay”。谁能找到问题呢?

谢谢,Mishal

3 个答案:

答案 0 :(得分:3)

您必须正确计算括号:

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

会捕获caycabbycatty

更简单:

ca(bb|tt)?y

将明确捕获caycabbycatty


PS:我认为量化反向引用(如在\2*中)是不可能的,但实际上它是。如果您想匹配任何数量的 "t" "b",以下情况就可以了:

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

匹配caycabycabbycabbbbbbbbbbbbbbbbbbbbycatttty等。可以简化为等效内容:

ca([bt])\1*y 

因为这样的构造(x*)?是多余的。

答案 1 :(得分:1)

这应该可以做到没有反向引用的技巧:

ca(?:bb|tt)?y

答案 2 :(得分:1)

使用非捕获组

ca(?:bb|tt)?y

或更简单,没有

ca(bb|tt)?y
相关问题