正则表达式:检查字符串是否以随机顺序匹配多个子字符串
Regex: check if string match multiple substrings in random order
我有一个始终采用以下模式的字符串:
"AB AB AB AB AB " // (note the trailing space)
其中A
可以是"12345678TJQKA"
中的任意字符,B
可以是"HSCD"
中的任意字符(基本就是52张扑克牌)
我如何使用正则表达式检查此字符串是否是皇家同花顺?
我尝试了一些没有结果的事情(现在只使用钻石)(注意:我不知道如何正确使用前瞻、后视和环视,所以我很可能会 有些东西 一切都错了..)
^(?=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.
如果您有一个正则表达式,不仅可以匹配钻石同花大顺,而且可以同时匹配所有花色(并解释其工作原理),那就更好了。 (任何其他检查皇家同花顺而不是正则表达式的方法也很好,但我仍然想知道如何在正则表达式中也能做到这一点,因为这是我的主要问题所在。)
您可以使用正则表达式来检查这一点,尽管这可能不是最好的方法。
我的回答假设所有字符串都是正确的条目(给定格式的 5 张卡片)。
然后我们可以使用
^(?=.*J(\w))(?=.*Q)(?=.*T)(?=.*K)(?=.*A).*$
检查是否是皇家同花顺。我们使用一堆前瞻来检查所需的卡片,并在第一次尝试匹配使用过的花色并将其与反向引用一起使用。我们可以简单地使用 \w
来检查花色,因为卡类型和花色的标识符不重叠(甚至 .
应该是可能的)
我有一个始终采用以下模式的字符串:
"AB AB AB AB AB " // (note the trailing space)
其中A
可以是"12345678TJQKA"
中的任意字符,B
可以是"HSCD"
中的任意字符(基本就是52张扑克牌)
我如何使用正则表达式检查此字符串是否是皇家同花顺?
我尝试了一些没有结果的事情(现在只使用钻石)(注意:我不知道如何正确使用前瞻、后视和环视,所以我很可能会 有些东西 一切都错了..)
^(?=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.
如果您有一个正则表达式,不仅可以匹配钻石同花大顺,而且可以同时匹配所有花色(并解释其工作原理),那就更好了。 (任何其他检查皇家同花顺而不是正则表达式的方法也很好,但我仍然想知道如何在正则表达式中也能做到这一点,因为这是我的主要问题所在。)
您可以使用正则表达式来检查这一点,尽管这可能不是最好的方法。
我的回答假设所有字符串都是正确的条目(给定格式的 5 张卡片)。
然后我们可以使用
^(?=.*J(\w))(?=.*Q)(?=.*T)(?=.*K)(?=.*A).*$
检查是否是皇家同花顺。我们使用一堆前瞻来检查所需的卡片,并在第一次尝试匹配使用过的花色并将其与反向引用一起使用。我们可以简单地使用 \w
来检查花色,因为卡类型和花色的标识符不重叠(甚至 .
应该是可能的)