正则表达式 PHP 分割数字和字符串

3

我想把包含数字和字母的字符串拆分。就像这样:

ABCd Abhe123
123ABCd Abhe
ABCd Abhe 123
123 ABCd Abhe

我尝试了这个:
<?php preg_split('#(?<=\d)(?=[a-z])#i', "ABCd Abhe 123"); ?>

但是它不起作用。数组中只有一个单元格包含"ABCd Abhe 123"
例如,我想在单元格0中放置数字,在单元格1中放置字符串:

[0] => "123",
[1] => "ABCd Abhe"

谢谢您的帮助!;)

1
你对上面的字符串期望输出什么? - Alma Do
如果可能的话,就像我写的那样用数组。(谢谢编辑我的文章 :$) - Lapinou
2个回答

2
请使用preg_match_all代替。
preg_match_all("/(\d+)*\s?([A-Za-z]+)*/", "ABCd Abhe 123" $match);

对于每个匹配:
  • $match[i][0] 包含匹配的片段
  • $match[i][1] 包含数字
  • $match[i][2] 包含字母

(在这里查看正则表达式测试)

然后将它们放入数组中。
for($i = 0; $i < count($match); $i++)
{
    if($match[i][1] != "")
        $numbers[] = $match[1];

    if($match[i][2] != "")
        $letters[] = $match[2];
}

编辑1

我已经更新了正则表达式。它现在可以匹配包含数字或字母以及带或不带空格的字符串。


编辑2

正则表达式是正确的,但是数组处理有误。请使用preg_match_all函数,这样$match就是一个包含数组的数组,例如:

Array
(
    [0] => Array
        (
            [0] => Abc
            [1] =>  aaa
            [2] => 25
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 25
        )

    [2] => Array
        (
            [0] => Abc
            [1] => aaa
            [2] => 
        )

)

太棒了!我不知道这个网站!我刚刚改成:(\d+)|([\WA-Za-z]+) 以使用空格。谢谢! - Lapinou
我回来了 ^^ 奇怪,我有字母但没有数字... 有什么想法吗?但如果我在这里测试:http://www.rubular.com/r/X0RRECjww5,它可以工作... - Lapinou
正如您在那里看到的,数字全部都在$match的索引1中,而字母则在$match的索引2中。确保您获取正确的索引。此外,您用什么作为输入?一个单独的长字符串吗? - Richard de Wit
这是一个普通的字符串。我检查了我的输入字符串,我有像这样的东西:Abc aaa25。然后,我检查了我的数组:count(numbers) 和 count(letters)。其中一个为0 => numbers。我不明白 :/ - Lapinou
请使用preg_match_all而不是preg_match,请查看更新后的答案。 - Richard de Wit

0

可能是这样的吗?

$numbers = preg_replace('/[^\d]/', '', $input);
$letters = preg_replace('/\d/', '', $input);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接