有计算直接扑克牌的正则表达式吗?
我正在使用字符串来表示已排序的卡片,例如:
AAAAK#sssss = 4 aces and a king, all of spades.
A2345#ddddd = straight flush, all of diamonds.
Run Code Online (Sandbox Code Playgroud)
在Java中,我正在使用这些正则表达式:
regexPair = Pattern.compile(".*(\\w)\\1.*#.*");
regexTwoPair = Pattern.compile(".*(\\w)\\1.*(\\w)\\2.*#.*");
regexThree = Pattern.compile(".*(\\w)\\1\\1.*#.*");
regexFour = Pattern.compile(".*(\\w)\\1{3}.*#.*");
regexFullHouse = Pattern.compile("((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*");
regexFlush = Pattern.compile(".*#(\\w)\\1{4}");
Run Code Online (Sandbox Code Playgroud)
如何使用正则表达式计算直线(序列)值?
编辑
我打开另一个问题来解决同样的问题,但是使用char的ascii值,正则表达式是短的.细节在这里.
谢谢!
我必须承认,正则表达式并不是我想到的第一个工具。我几乎可以保证,与同等的程序代码相比,任何能够对未分类的手执行此操作的RE都将更加丑陋且可读性差。
假设卡片是按面值排序的(它们似乎不是您列出的正则表达式也不起作用),并且您必须使用正则表达式,则可以使用类似
2345A|23456|34567|...|9TJQK|TJQKA
Run Code Online (Sandbox Code Playgroud)
以检测手的面值部分。
实际上,从我这里收集的“标准”牌手出发,应按优先级从高到低的顺序检查以下内容:
Royal/straight flush: "(2345A|23456|34567|...|9TJQK|TJQKA)#(\\w)\\1{4}"
Four of a kind: ".*(\\w)\\1{3}.*#.*"
Full house: "((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*"
Flush: ".*#(\\w)\\1{4}"
Straight: "(2345A|23456|34567|...|9TJQK|TJQKA)#.*"
Three of a kind: ".*(\\w)\\1\\1.*#.*"
Two pair: ".*(\\w)\\1.*(\\w)\\2.*#.*"
One pair: ".*(\\w)\\1.*#.*"
High card: (none)
Run Code Online (Sandbox Code Playgroud)
基本上,这些与您的相同,只是我添加了皇家/同花顺和同花顺。如果您按顺序检查它们,则应该从手中获得最佳分数。高级卡没有正则表达式,因为那是您唯一的分数。
我也将钢轮(环绕式)直线从A2345更改为,2345A因为它们将以这种方式进行排序。
| 归档时间: |
|
| 查看次数: |
1944 次 |
| 最近记录: |