考虑到五张纸牌中有A23456789TJQK
的扑克手,我可以使用正则表达式通过执行以下操作来确定一手中是否有一对:
.*(.).*\1
https://regex101.com/r/1OMHnJ/1
这通过引用捕获的组或卡来工作-如果重复,则正则表达式成功,如果不成功,则不成功。
但是,如果有两对,就会变得更加困难。我首先通过做一个类似的捕获组来开始我的方法,然后检查\2
是否存在,但是如果存在3种或4种类型,这将不能很好地工作-有时可能会将其误认为2对。
对于无序的手,看看它是否包含两对(不同的)对,有什么好的正则表达式?
您可以使用多个反向引用来完成此操作。
[正在使用中查看它here
^(?!.*?(.)(?:.*?\1){2})(?=.*?(.).*?\2)(?=.*?(?!\2)(.).*?\3).*
它的工作方式如下:
^
在行首的断言位置(?!.*?(.)(?:.*?\1){2})
否定前瞻,确保不存在三重匹配(?=.*?(.).*?\2)
正向向前确保字符串中存在一对字符(?=.*?(?!\2)(.).*?\3)
正向提前确保字符串中存在一对与第一对不同的字符(与前一个正向提前不同).*
匹配字符串