这似乎必须如此简单,但正则表达式对我来说非常困惑。我正在抓取$ _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,这是我不想要的。我觉得这可能是一个令人难以置信的简单解决方案,但我在这里旋转。
答案 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"
)