使用正则表达式确定用户的扑克牌中是否有两对

问题描述 投票:0回答:1

考虑到五张纸牌中有A23456789TJQK的扑克手,我可以使用正则表达式通过执行以下操作来确定一手中是否有一对:

.*(.).*\1

https://regex101.com/r/1OMHnJ/1

这通过引用捕获的组或卡来工作-如果重复,则正则表达式成功,如果不成功,则不成功。

但是,如果有两对,就会变得更加困难。我首先通过做一个类似的捕获组来开始我的方法,然后检查\2是否存在,但是如果存在3种或4种类型,这将不能很好地工作-有时可能会将其误认为2对。

对于无序的手,看看它是否包含两对(不同的)对,有什么好的正则表达式?

regex
1个回答
1
投票

您可以使用多个反向引用来完成此操作。

[正在使用中查看它here

^(?!.*?(.)(?:.*?\1){2})(?=.*?(.).*?\2)(?=.*?(?!\2)(.).*?\3).*

它的工作方式如下:

  • ^在行首的断言位置
  • [(?!.*?(.)(?:.*?\1){2})否定前瞻,确保不存在三重匹配
  • (?=.*?(.).*?\2)正向向前确保字符串中存在一对字符
  • (?=.*?(?!\2)(.).*?\3)正向提前确保字符串中存在一对与第一对不同的字符(与前一个正向提前不同)
  • [.*匹配字符串
© www.soinside.com 2019 - 2024. All rights reserved.