Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何在PHP中使用正则表达式将字符串拆分为2_Php_Regex_Preg Split - Fatal编程技术网

PHP:如何在PHP中使用正则表达式将字符串拆分为2

PHP:如何在PHP中使用正则表达式将字符串拆分为2,php,regex,preg-split,Php,Regex,Preg Split,如何将正则表达式与PHP结合使用,将以下字符串拆分为2个PAR,如下所示: 要拆分的字符串:4x330ml 分为4x330和ml 我尝试了以下方法,但没有返回准确的数据: $pdata = "4x330ml" $data = preg_split('#(?<=\d)(?=[a-z])#i', $pdata); 这将返回: Array ( [0] => 5x [1] => ml ) 该字符串中的500未被返回 谢谢,这应该能满足你的需要 $pdata = "4

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

要拆分的字符串:
4x330ml

分为
4x330
ml

我尝试了以下方法,但没有返回准确的数据:

$pdata = "4x330ml"
$data = preg_split('#(?<=\d)(?=[a-z])#i', $pdata);
这将返回:

Array
(
    [0] => 5x
    [1] => ml
)
该字符串中的
500
未被返回


谢谢,

这应该能满足你的需要

$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”。

这应该能满足您的需要

$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”。

您所说的可以是ml、cm或kg。而且你不必使用正则表达式。因此,假设结尾总是2个字符,一个非常简单的方法是:

$string = "4x330ml";
$part1 = substr($string, 0, -2); //returns 4x330
$part2 = substr($string, -2, 2); //returns "ml"

你说可以是毫升,厘米,或公斤。而且你不必使用正则表达式。因此,假设结尾总是2个字符,一个非常简单的方法是:

$string = "4x330ml";
$part1 = substr($string, 0, -2); //returns 4x330
$part2 = substr($string, -2, 2); //returns "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

假设单位长度始终为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

你可以不用正则表达式来做这件事

$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+x\d+)/', $data, NULL, PREG_SPLIT_DELIM_CAPTURE);
它现在打印:

array(
    [0] => 
    [1] => 4x500
    [2] => ml
)
它看起来像是将delimeter捕获为数组[1],因为delimeter实际上是我想要拆分的字符串的第一部分,所以现在还可以,直到我找到更好的解决方案


谢谢大家的尝试。

我使用以下代码解决了这个问题:

$data = "4x500ml";
$pdata = preg_split('/(\d+x\d+)/', $data, NULL, PREG_SPLIT_DELIM_CAPTURE);
它现在打印:

array(
    [0] => 
    [1] => 4x500
    [2] => ml
)
它看起来像是将delimeter捕获为数组[1],因为delimeter实际上是我想要拆分的字符串的第一部分,所以现在还可以,直到我找到更好的解决方案

谢谢大家的尝试。

我会使用preg\u match:

$pdata = "4x330ml";
preg_match('/(\d+x\d+)(.*)/',$pdata, $m);
print_r($m);
输出:

Array
(
    [0] => 4x330ml
    [1] => 4x330
    [2] => ml
)
我会使用preg_match:

$pdata = "4x330ml";
preg_match('/(\d+x\d+)(.*)/',$pdata, $m);
print_r($m);
输出:

Array
(
    [0] => 4x330ml
    [1] => 4x330
    [2] => ml
)


你真的需要用正则表达式吗?我不需要。事实上,任何事情都可以达到正确的解决方案,但是你给出的分割字符串的标准是什么?总是ml吗?不是。。我应该在问题中指出这一点。但是它也可能是
cm
kg
。现在你有两个问题。你真的需要使用正则表达式吗?我不需要。事实上,任何事情都可以达到正确的解决方案,但是你给出的分割字符串的标准是什么?总是ml吗?不是。。我应该在问题中指出这一点。但是它也可能是
cm
kg
。现在您有两个问题。我喜欢这个想法,但它返回了一个错误
PHP警告:preg_split():未知修饰符“|”
我认为您缺少字符串开头和结尾的正则表达式分隔符。通常您会使用
/
。此新解决方案不起作用。。。我想看看是否可以使用regex生成一个解决方案这部分
[^(ml | cm | kg)]*
的意思是什么?我喜欢这个想法,但它返回了一个错误
PHP警告:preg_split():未知修饰符“|”
我认为您缺少字符串开头和结尾的regex分隔符。通常您会使用
/
。此新解决方案不起作用。。。我想看看是否可以使用regex生成一个解决方案。您认为这部分的意思是什么?
[^(ml | cm | kg)]*
完美!这个解决方案类似于我提供的preg_分割,但更好。谢谢完美的这个解决方案类似于我提供的preg_分割,但更好。谢谢