В шаблоне, который вы пробовали, второй класс символов не соответствует цифре, и дефис должен быть экранирован или помещен в начало / конец.
Вместо этого вы можете использовать один класс символов. Если вы измените разделитель на значение, отличное от /
, например, ~
, вам не придется выходить через косую черту.
[-*\/+\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