5

我有类似的字符串

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

但出了点问题。

4

3 回答 3

7

试试这个:

<?php 

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

?>

将输出:

Array ( [0] => abc [1] => 2 2mg ) 
于 2013-05-23T09:09:10.070 回答
4

正则表达式解决方案是调用preg_split

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

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

于 2013-05-23T09:09:41.587 回答
3

你不需要正则表达式:

$str = 'cream 100g';

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

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

也可以看看:strcspn()

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

于 2013-05-23T09:06:52.370 回答