正则表达式计算直接扑克牌?

Top*_*era 5 regex poker

有计算直接扑克牌的正则表达式吗?

我正在使用字符串来表示已排序的卡片,例如:

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值,正则表达式是短的.细节在这里.

谢谢!

pax*_*blo 5

我必须承认,正则表达式并不是我想到的第一个工具。我几乎可以保证,与同等的程序代码相比,任何能够对未分类的手执行此操作的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因为它们将以这种方式进行排序。