我尝试将我的字符串拆分为一个数组。计算符号+/*-
之间的所有字符串:
$keywords = preg_split("/[\s,-]*[+-*]+/", "quanity*price/2+tax");
这是我试图实现的目标:
Array
(
[0] => quantity
[1] => price
[1] => tax
)
但是结果是一个空字符串。
答案 0 :(得分:3)
在您尝试的模式中,第二个字符类与数字不匹配,并且连字符应转义或放在开头/结尾。
您可以改用单个字符类。如果将定界符更改为/
之类的~
以外的其他字符,则不必转义正斜杠。
[-*\/+\d]+
例如
$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]+
答案 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)。