PHP:如何在PHP中使用正则表达式以2中的划分字符串



我将如何使用PHP的正则表达式将以下字符串分为2个PAR,如下所示:

要分开的字符串:4x330ml

分为4x330ml

我尝试了以下内容,但它没有返回准确的数据:

$pdata = "4x330ml"
$data = preg_split('#(?<=d)(?=[a-z])#i', $pdata);

然后,我在$data[0]中获得了4$data[1]中的x330

编辑:请注意,ml也可以是cmkg等。有点复杂,我似乎找不到解决方案。

编辑:我也尝试了以下正则(目前我更喜欢使用它),结果不完整:

$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],并且由于分隔线实际上是我想拆分的字符串的第一部分,直到我找到一个更好的解决方案。

谢谢大家的尝试。

最新更新