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

php:拆分字符串直到第一个数字出现,php,preg-match,preg-split,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/',

我有一条像绳子一样的线

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

但是出现了一些问题。

您不需要正则表达式:

$str = 'cream 100g';

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

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

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

试试这个:

<?php 

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

?>

正则表达式的解决方案是调用
preg\u split
as

preg_split('/(?=\d)/', $t->formula, 2)
这里的要点是,您不必通过使用正向前瞻而不是捕获来使用用作分割分隔符的数字(这样它在之后仍保留在$after中),并且我们可以通过使用第三个参数来确保分割产生的片段不超过两个。

是preg_split('/(?=\d)/,$input,2)您在寻找什么?
preg_split('/(?=\d)/', $t->formula, 2)