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

How can I split a string into an array?

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

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

这是我努力实现的目标:

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

但结果是一个空字符串。

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

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

为清楚起见,已发布带有示例的代码。

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

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

在您尝试的模式中,第二个字符 class 与数字不匹配,连字符应转义或放置在 beginning/end.

您可以改用单个字符 class。如果将分隔符更改为 / 以外的其他分隔符,例如 ~,则不必转义正斜杠。

[-*\/+\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