如何用任何整数分解字符串?正则表达式?

时间:2011-10-26 20:14:05

标签: php regex preg-split

这似乎必须如此简单,但正则表达式对我来说非常困惑。我正在抓取$ _GET变量,它们看起来像typeX,optionX,groupX等,其中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,这是我不想要的。我觉得这可能是一个令人难以置信的简单解决方案,但我在这里旋转。

3 个答案:

答案 0 :(得分:11)

您应该使用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
)

答案 1 :(得分:2)

试试这个:

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

PHP示例代码:

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

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

?>

答案 2 :(得分: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"
)