我将如何使用PHP的正则表达式将以下字符串分为2个PAR,如下所示:
要分开的字符串:4x330ml
分为4x330
和ml
我尝试了以下内容,但它没有返回准确的数据:
$pdata = "4x330ml"
$data = preg_split('#(?<=d)(?=[a-z])#i', $pdata);
然后,我在$data[0]
中获得了4
,$data[1]
中的x330
编辑:请注意,ml
也可以是cm
,kg
等。有点复杂,我似乎找不到解决方案。
编辑:我也尝试了以下正则(目前我更喜欢使用它),结果不完整:
$pdata = "5x500ml";
$data = preg_split('/(d+.?d+)|(w+)i/', $pdata);
此返回:
Array
(
[0] => 5x
[1] => ml
)
500
从该字符串返回...
谢谢,
您说的可能是ML,CM或KG。而且您不必使用正则。因此,假设最终是2个字符,那么这样做的一种非常简单的方法是:
$string = "4x330ml";
$part1 = substr($string, 0, -2); //returns 4x330
$part2 = substr($string, -2, 2); //returns "ml"
这应该给你想要的东西。
$pdata = "4x330cm";
$data = preg_match('/([^(ml|cm|kg)]*)(ml|cm|kg)/', $pdata, $group);
echo $group[0].' ';
echo $group[1].' ';
echo $group[2].' ';
使用preg_match
函数,然后将结果存储到数组中。0索引将返回整个匹配的字符串。$group[1]
将仅返回" 4x330"。$group[2]$
将仅返回" CM"。
我会使用preg_match:
$pdata = "4x330ml";
preg_match('/(d+xd+)(.*)/',$pdata, $m);
print_r($m);
输出:
Array
(
[0] => 4x330ml
[1] => 4x330
[2] => ml
)
假设单元始终为2个字符,您可以使用此
$pdata = "4x330ml";
$strNumber = substr($pdata, 0, strlen($pdata)-2);
$strUnit = substr($pdata, strlen($pdata)-2,2);
echo $strNumber; //returns 4x330
echo $strUnit; //returns ml
您可以在没有正则
的情况下执行此操作$string = '4x330ml';
$splitPoint = strrpos($string,'m');
$firstPart = substr($string,0,$string); //gets 4x330
$secondPart = substr($string,$splitPoint); //gets ml
我能够使用以下代码解决此问题:
$data = "4x500ml";
$pdata = preg_split('/(d+xd+)/', $data, NULL, PREG_SPLIT_DELIM_CAPTURE);
现在打印:
array(
[0] =>
[1] => 4x500
[2] => ml
)
看起来它正在捕获特定器作为数组[1],并且由于分隔线实际上是我想拆分的字符串的第一部分,直到我找到一个更好的解决方案。
。谢谢大家的尝试。