我正在尝试编写一个程序来识别你在玩扑克时拥有的牌。我正在创建的模式对象的格式是检查五张牌,每张牌由值和套装定义。因此,例如,黑桃的ace将被表示为As。我有以下代码来识别直接,但只有在顺序时它才有效。我怎么能让它像5d4sAc3s2h
这样的字符串直接识别呢?谢谢你的帮助!
Pattern[] floppedStraightCheck;
floppedStraightCheck = new Pattern[10];
floppedStraightCheck[0] = Pattern.compile("(([aA][scdhSCDH])([2][scdhSCDH])([3][scdhSCDH])([4][scdhSCDH])([5][scdhSCDH])");
答案 0 :(得分:2)
我必须完全赞同上面发表的评论。我不认为regular expression
是构成这个的合适方式。我还建议您使用不同于手的方法而不是字符串。在这种情况下,您可以了解正则表达式的重要事项是not
何时使用它们。
答案 1 :(得分:1)
正则表达式不是很好的任务。您有多个and
条件,您可以使用正向前瞻。
^(?=.*[aA][scdhSCDH])(?=.*2[scdhSCDH])(?=.*3[scdhSCDH])(?=.*4[scdhSCDH])(?=.*5[scdhSCDH]).{10}$
更短的版本将是:
^(?=(..)*[aA])(?=(..)*2)(?=(..)*3)(?=(..)*4)(?=(..)*5)(.[scdhSCDH]){5}$