我只是一直在试图教自己如何使用正则表达式,如果对某些人来说这很琐碎,那么请抱歉。

我正在制作一个crib脚本。它使用标准的扑克牌,我将CDHS(棍棒,钻石,心形,黑桃)用于西装,并将A2..9TJQK(ace,2 ... 9、10, jack ,皇后,国王)用于队伍。

我有一个$hand变量,它是一副均匀长度的纸牌。例如,S2HA3D分别是黑桃2,红桃A和钻石3。请注意,西服和等级可以任意选择。

我正在使用:

preg_match_all("/[2-9ATJQK][CDHS]|[CDHS][2-9ATJQK]/i", $hand, $result);

查找所有卡片,但是这将返回找到的西装并按找到的顺序排列。

我的问题是,不管给出的顺序如何,如何使结果排在每张卡的第一位。我希望我的表述清楚。

最佳答案

我认为您不能仅使用preg_match来做到这一点。

此功能旨在匹配字符串,而不是对其进行操作。但是,您可以在第二遍中执行preg_replace:

preg_match_all("/[2-9ATJQK][CDHS]|[CDHS][2-9ATJQK]/i", $hand, $rawResult);
$normalisedResult = preg_replace('/([CDHS])([2-9ATJQK])/i', "$2$1", $rawResult[0]);

如果您想知道,$1$2是对preg_replace()的第一个参数中括号所标识的组的反向引用。

10-07 14:01