我只是一直在试图教自己如何使用正则表达式,如果对某些人来说这很琐碎,那么请抱歉。
我正在制作一个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()
的第一个参数中括号所标识的组的反向引用。