首页 > 解决方案 > 正则表达式任何字符,只要字符相同

问题描述

我有一个字符串代表一副牌中的牌,即 7c9hQsKsAs

是否可以使用正则表达式来指定 .*x.*x.*x.*x.*x ,其中 x 将指定任何字符(c/h/d/s),只要该字符始终是相同的字符?这将用于确定是否存在冲洗。

这将用于确定给定的牌是否构成特定的扑克手。我考虑过按价值和花色排序,但是我仍然需要指定所有花色字符都是相同的(即价值和花色排序的 TcJcQcKcAd 将是皇家同花顺)。

标签: regex

解决方案


这取决于您使用的正则表达式的风格,但如果它支持反向引用,那么是的:

.*(\w).*\1.*\1.*\1.*\1.*

火柴...

123c234c345c456c567c678

以“c”作为第一个参考。\1说要匹配第一个捕获的组

演示:https ://regex101.com/r/Ia9Zg0/1

即使每个字符(1、2、3、4、5、6、7、8 和 c),给定整个表达式,捕获的组也只匹配“c”,因为它是唯一重复 5 次的组。

您可能需要更具体的内容,例如:

.+([chds]).+\1.+\1.+\1.+\1

这使用+(1 或更多)而不是*(0 或更多),因为您确实需要在每个西装字符之前有一个等级(值)字符。 (0 或更多) 将使其成为可选。*

演示:https ://regex101.com/r/VKbmnR/1/

帮助:https ://www.regular-expressions.info/backref.html


推荐阅读