如何将字符串拆分为数组?

时间:2019-10-17 14:02:13

标签: php string preg-split

我尝试将我的字符串拆分为一个数组。计算符号+/*-之间的所有字符串:

$keywords = preg_split("/[\s,-]*[+-*]+/", "quanity*price/2+tax");

这是我试图实现的目标:

Array
(
    [0] => quantity
    [1] => price
    [1] => tax
)

但是结果是一个空字符串。

3 个答案:

答案 0 :(得分:3)

在您尝试的模式中,第二个字符类与数字不匹配,并且连字符应转义或放在开头/结尾。

您可以改用单个字符类。如果将定界符更改为/之类的~以外的其他字符,则不必转义正斜杠。

[-*\/+\d]+

Regex demo | Php demo

例如

$strings = [
    "quanity*price/2+tax",
    "quanity*price/2"
];

foreach ($strings as $string) {
    $keywords = preg_split("~[-*/+\d]+~", $string,  -1, PREG_SPLIT_NO_EMPTY);
    print_r($keywords);
}

输出

Array
(
    [0] => quanity
    [1] => price
    [2] => tax
)
Array
(
    [0] => quanity
    [1] => price
)

如果您还想匹配0+前面的空格字符,请使用逗号:

[\s,]*[-*/+\d]+

Regex demo

答案 1 :(得分:2)

这将在以下任意一个存在的位置拆分字符串:+ / *并从中创建一个数组:

$string = "quanity*price/2+tax";  
$str_arr = preg_split ("/[-*\/+\d]+/", $string);  
print_r($str_arr); 

为清楚起见,将代码和示例一起发布。

答案 2 :(得分:2)

使用第四只鸟推荐的正则表达式:

$keywords = preg_split("/[-*\/+\d]+/", "quanity*price/2+tax", -1, PREG_SPLIT_NO_EMPTY);

PREG_SPLIT_NO_EMPTY应该删除空值(https://www.php.net//manual/en/function.preg-split.php)。

相关问题