6

私は正規表現の使い方を独学で学ぼうとしていただけなので、これが些細なことのように思われる場合は申し訳ありません。

小さなクリブスクリプトを作成しています。トランプの標準的なデッキを使用し、CDHSスーツには (クラブ、ダイヤモンド、ハート、スペード) をA2..9TJQK使用し、ランクには (エース、2...9、10、ジャック、クイーン、キング) を使用しています。

$handカードの偶数長の文字列である変数があります。たとえば、S2HA3Dそれぞれスペードの 2、ハートのエース、ダイヤの 3 になります。スーツとランクはどちらでもかまいません。

私は使用しています:

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

すべてのカードを検索しますが、これは見つかった順序でスーツとランクを返します。

私の質問は、与えられた順序に関係なく、各カードのランクを最初に与えるにはどうすればよいかということです。私はこれを明確に表現したことを願っています。

4

4 に答える 4

3

だけではそれができないと思いますpreg_match

この関数は、文字列を操作するためではなく、文字列を照合するためのものです。ただし、2 番目のパスで a を実行できます。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()

于 2013-06-27T16:49:10.103 に答える
1

編集:最初はあなたの質問を正しく理解できませんでした。これがあなたがする必要があることです、あなたは次のような2つの正規表現呼び出しを行う必要があります:

/([CDHS])([A2-9TJQK])/i

それから:

/([A2-9TJQK])([CDHS])/i

第 1 グループの値と第 2 グループの値を保持できる変数を作成してみてください。次に、正しいランクを取得するには、2 番目のパターンでそれらを切り替える必要があります...

私が間違っている場合は修正してください。ただし、1 つの正規表現でこれを行うことはできません。

于 2013-06-27T16:23:08.660 に答える