4

これはとても単純なことのように思えますが、正規表現は私には非常に混乱します。typeX、optionX、groupXなどのように見える$ _GET変数を取得しています。ここで、Xは任意の正の整数に等しくなります。次に、type1が「type」と「1」の配列になるように文字列を整数で分割する必要がありますが、type10は「type」と「1」と「0」ではなく「typeと「10」」の配列になる必要があります。

私は正規表現のパターンにまったく慣れていませんが、最終的に次のことを思いつきました。

$array = preg_split("#\\d+#", $key, -1, PREG_SPLIT_NO_EMPTY);
print_r($array);

しかし、結果に示されているように、文字列を2つの配列に分割するのではなく、末尾から数字を削除しただけです。

Array ( [0] => type )

また、これによって数10がさらに1と0に分割されるかどうかはわかりませんが、これは望ましくありません。これはおそらく気が遠くなるほど単純な解決策のように感じますが、私はここで円を描いて回転しています。

4

3 に答える 3

13

PREG_SPLIT_DELIM_CAPTUREフラグを使用して、分割したグループをキャプチャする必要があります。次に例を示します。

<?php

$key= "group12";
$pattern = "/(\d+)/";

$array = preg_split($pattern, $key, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r($array);

?>

|「ビットごとの or」演算子を使用して複数のフラグを組み合わせることに注意してください。

出力:

Array
(
    [0] => group
    [1] => 12
)
于 2011-10-26T20:26:11.927 に答える
2

これを試してください:

/(\D+)(\d+)/

PHP のサンプル コード:

<?php
$str = 'test189';
$pattern = '/(\D+)(\d+)/';

$res = preg_match_all($pattern, $str, $matches);
var_dump($matches);

?>
于 2011-10-26T20:21:03.710 に答える
1

preg_match括弧をキャプチャして使用します。

<?php

$str = "type10";

$matches = array();

preg_match('/([a-zA-Z]+)(\d+)/', $str, $matches );

print_r($matches);

?>

出力:

Array(
    0 => "type10"
    1 => "type"
    2 => "10"
)

次に、最初の要素を取り除くには:

<?php
array_shift($matches);
print_r($matches);
?>

与えるには:

Array(
    0 => "type"
    1 => "10"
)
于 2011-10-26T20:25:06.540 に答える