正则表达式:检查字符串是否以随机顺序匹配多个子字符串

时间:2017-11-23 13:50:08

标签: java regex regex-lookarounds lookbehind playing-cards

我的字符串始终采用以下格式:

"AB AB AB AB AB "   // (note the trailing space)

其中A可以是"12345678TJQKA"中的任何字符,而B可以是"HSCD"中的任何字符(基本上是52张扑克牌)。

如何判断此字符串是否为带有正则表达式的皇家同花顺?

我试过没有结果的一些事情(现在只使用钻石)(注意:我不知道如何正确使用前瞻,后视和环顾四周,所以我很可能做某事< / s>一切都错了..)

^(?=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的捕获组,所以它对所有四件套装都是统一的..

Here is an online regex tester with some test cases in case anyone want to fuddle around.

如果你的正则表达式不仅适用于Diamond Royal Flush,而且适用于同时适用于所有套装(解释它如何工作),那将更好。 (检查皇家同花顺而不是正则表达式的任何其他方法也很好,但我仍然想知道如何在正则表达式中完成此操作,因为这是我的问题主要是关于。)

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式来检查这一点,但这可能不是最好的方法。

我的回答是假设所有字符串都是正确的条目(给定格式的5张卡片)。

然后我们可以使用

QObject::connect(titleLabel, &QPushButton::clicked, [this]
{
    toggleButton->click();
});

检查是否是皇家同花顺。我们使用一堆前瞻来检查所需的卡片,并在第一次尝试时匹配使用过的套装并使用反向引用将其破坏。我们可以简单地使用^(?=.*J(\w))(?=.*Q\1)(?=.*T\1)(?=.*K\1)(?=.*A\1).*$ 来检查套装,因为卡片类型和套装的标识符不会重叠(甚至\w应该是可能的)

请参阅https://regex101.com/r/eR9kQ6/23