4

这看起来一定很简单,但是正则表达式让我非常困惑。我正在抓取看起来像 typeX、optionX、groupX 等的 $_GET 变量,其中 X 等于任何正整数。然后我需要将字符串拆分为整数,以便 type1 成为“type”和“1”的数组,但是 type10 必须成为“type”和“10”的数组,而不是“type”和“1”和“0”的数组。

我对正则表达式模式完全不熟悉,但最终想出了:

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

但它只是从末尾删除了数字,而不是将字符串拆分为两个数组,如结果所示:

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);

?>

请注意,您使用|“按位或”运算符组合多个标志。

输出:

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 回答