正则表达式检查范围内的字符是否重复

时间:2010-03-21 13:51:36

标签: regex string

我希望与AhKs&等字符串匹配AdKs(即两张牌Ah =心之王)。我希望将两张非正式牌与正则表达式匹配,我目前拥有的是"^[AKQJT2-9][hscd]{2}$",但这可以匹配AhKh(适合)和AhAh之类的牌。有没有办法可以使用反向引用来说第二个[hscd]不能与第一个[AKQJT2-9]类似

4 个答案:

答案 0 :(得分:5)

不完全优雅,但有效:

^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$

答案 1 :(得分:4)

试试这个正则表达式:

^[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])$

答案 2 :(得分:1)

负面的预测来救援

/^[AKQJT2-9]([hscd])[AKQJT2-9](?!\1)[hscd]$/

:(太晚了。

答案 3 :(得分:1)

是。使用反向引用和负面预测。

^([AKQJT2-9])([hscd])(?!\1)(?!.\2)[AKQJT2-9][hscd]$