views:

56

answers:

2

Hi,

I am trying to write a regex to match pairs of cards (AA, KK, QQ ... 22) and I have the regex ([AKQJT2-9])\1. The problem I have is that this regex will match AA as well as AAbc etc. Is there a way to write the regex such that I can specify I want to match ([AKQJT2-9])\1 and only that (i.e. no more characters after).

Thanks

+4  A: 

Enclose the regex in ^ and $:

^([AKQJT2-9])\1$

^ is the "start-of-string" anchor, and $ is the "end-of-string" anchor. If your regex flavor supports it, \A and \Z might be an even better choice since ^ and $ can also match start/end of a line in a multiline string, depending on your regex engine and configuration.

Tim Pietzcker
+2  A: 

You mean, like this ?

^([AKQJT2-9])\1$

It will only match if the string is "AA", "KK", …

If you want to capture both characters, but not the rest of the string, you'll have to use another parenthesis

($match,$unused) = $string ~= (([AKQJT2-9])\2); # in perl
Romuald Brunet