我想匹配字符串,如AhKs
& AdKs
(即两张卡Ah = Heart of Ace)。我想用正则表达式匹配两个off-suit卡片,我现在拥有的是"^[AKQJT2-9][hscd]{2}$"
,但这可能匹配诸如AhKh
(合适)和AhAh
之类的手。有没有一种方法可能要使用反向引用说第二[hscd]
不能一样正则表达式检查范围内的字符不重复
3
A
回答
4
试试这个正则表达式的冷杉(同样为[AKQJT2-9]
):
^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$
这里,negative look-ahead assertion (?!…)
用来禁止第四字符与第二个(第一个分组的匹配)相同。
但如果正则表达式实现不支持环视断言,您可能需要将其扩展成:
^[AKQJT2-9](h[AKQJT2-9][scd]|s[AKQJT2-9][hcd]|c[AKQJT2-9][hsd]|d[AKQJT2-9][hsc])$
5
不完全优雅,但工作原理:
^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$
+0
+1这实际上非常优雅。我的版本将会更加丑陋。 :) – cletus 2010-03-21 13:57:20
+0
击败我1秒! )))) – user187291 2010-03-21 13:57:48
1
一负面望向来拯救
/^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$/
:(太迟了
1
是的。使用反向参考和负面预测。
^([AKQJT2-9])([hscd])(?!\1)(?!.\2)[AKQJT2-9][hscd]$
击败我6秒! :D – 2010-03-21 13:55:34