我有一个始终采用以下模式的字符串:
"AB AB AB AB AB " // (note the trailing space)
其中A
可以是中的任何字符"12345678TJQKA"
,也B
可以是中的任何字符"HSCD"
(基本上是52张扑克牌)。
我如何检查此字符串是否为带有正则表达式的Royal Flush?
有些事情我想没有结果(只是用钻石现在)(注:我不知道如何正确使用查找aheads,查找屁股,并查找变通,所以我最有可能做的事情都错了..)
^(?=AD )(?=KD )(?=QD )(?=JD )TD $
^(?=AD .*)(?=KD .*)(?=QD .*)(?=JD .*)TD .*$
^(?=AD )(?=KD )(?=QD )(?=JD )(?=TD )$
^(?=AD .*)(?=KD .*)(?=QD .*)(?=JD .*)(?=TD .*)$
^(?<=AD )(?<=KD )(?<=QD )(?<=JD )(?<=TD )$
因此,我希望正则表达式可以"AD KD QD JD TD "
按任何顺序进行匹配(例如包括其反向("TD JD QD KD AD "
)或此随机顺序:)"KD TD QD AD JD "
。最好也有一个捕获组,D
这样它对所有四套西装都是统一的。
这是一个在线正则表达式测试仪,其中包含一些测试用例,以防任何人想要摸索。
如果您拥有一个不仅可以与Diamond Royal Flush匹配的正则表达式,而且可以同时适合所有西服(并说明其工作原理),那么效果会更好。(也可以使用其他任何方法来检查Royal Flush而不是regex,但是我仍然想知道如何在regex中完成此操作,因为这是我的主要问题所在。)
您可以使用regex进行检查,尽管这可能不是最佳方法。
我的回答是假设所有字符串都是正确的条目(以您给定的格式显示5张卡片)。
然后我们可以使用
^(?=.*J(\w))(?=.*Q\1)(?=.*T\1)(?=.*K\1)(?=.*A\1).*$
检查是否是皇家同花顺。我们使用大量的先行检查来检查所需的卡片,并在第一次尝试中将所使用的西装与后向引用重用。我们可以简单地使用\w
西装来进行检查,因为卡类型和西装的标识符不会重叠(甚至.
应该是可能的)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句