php:拆分字符串直到第一次出现数字

时间:2013-05-23 09:04:23

标签: php preg-match preg-split

我有像

这样的字符串
cream 100G
sup 5mg Children

我想在第一次出现数字之前拆分它。所以结果应该是

array(
    array('cream','100G'),
    array('sup','5mg Children')
);

可以告诉我如何为此创建模式吗?

我试过

list($before, $after) = array_filter(array_map('trim',
            preg_split('/\b(\d+)\b/', $t->formula)), 'strlen');

但出了点问题。

3 个答案:

答案 0 :(得分:6)

试试这个:

<?php 

$first_string = "abc2 2mg";
print_r( preg_split('/(?=\d)/', $first_string, 2));

?>

将输出:

Array ( [0] => abc [1] => 2 2mg ) 

答案 1 :(得分:4)

正则表达式解决方案是将preg_split称为

preg_split('/(?=\d)/', $t->formula, 2)

这里的要点是你不使用正向前瞻性而不是捕获它来消耗用作拆分分隔符的数字(因此它保留在$after中)并且我们确保拆分产生的数字不超过使用第三个参数的两个部分。

答案 2 :(得分:2)

您不需要正则表达式:

$str = 'cream 100g';

$p = strcspn($str, '0123456789');
$before = substr($str, 0, $p);
$after = substr($str, $p);

echo "before: $before, after: $after";

另请参阅:strcspn()

  

返回$str的初始段的长度,该段不包含'0123456789'中的任何字符,即数字。