正则表达式以任何顺序匹配

时间:2014-04-18 20:41:52

标签: java regex

我正在尝试编写一个程序来识别你在玩扑克时拥有的牌。我正在创建的模式对象的格式是检查五张牌,每张牌由值和套装定义。因此,例如,黑桃的ace将被表示为As。我有以下代码来识别直接,但只有在顺序时它才有效。我怎么能让它像5d4sAc3s2h这样的字符串直接识别呢?谢谢你的帮助!

Pattern[] floppedStraightCheck;
floppedStraightCheck = new Pattern[10];
floppedStraightCheck[0] = Pattern.compile("(([aA][scdhSCDH])([2][scdhSCDH])([3][scdhSCDH])([4][scdhSCDH])([5][scdhSCDH])");

2 个答案:

答案 0 :(得分:2)

我必须完全赞同上面发表的评论。我不认为regular expression是构成这个的合适方式。我还建议您使用不同于手的方法而不是字符串。在这种情况下,您可以了解正则表达式的重要事项是not何时使用它们。

答案 1 :(得分:1)

正则表达式不是很好的任务。您有多个and条件,您可以使用正向前瞻。

^(?=.*[aA][scdhSCDH])(?=.*2[scdhSCDH])(?=.*3[scdhSCDH])(?=.*4[scdhSCDH])(?=.*5[scdhSCDH]).{10}$

Regular expression visualization

Debuggex Demo

更短的版本将是:

^(?=(..)*[aA])(?=(..)*2)(?=(..)*3)(?=(..)*4)(?=(..)*5)(.[scdhSCDH]){5}$

Regular expression visualization

Debuggex Demo