我有像
这样的字符串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');
但出了点问题。
答案 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'
中的任何字符,即数字。