Как я могу разбить строку в массив? - PullRequest
2 голосов
/ 17 октября 2019

Я пытаюсь разбить мою строку на массив. Все строки между знаками вычисления +/*-:

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

Вот чего я пытаюсь достичь:

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

Но в результате получается пустая строка.

Ответы [ 3 ]

3 голосов
/ 17 октября 2019

В шаблоне, который вы пробовали, второй класс символов не соответствует цифре, и дефис должен быть экранирован или помещен в начало / конец.

Вместо этого вы можете использовать один класс символов. Если вы измените разделитель на значение, отличное от /, например, ~, вам не придется выходить через косую черту.

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

2 голосов
/ 17 октября 2019

Используя регулярное выражение, которое рекомендовала четвертая птица:

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

2 голосов
/ 17 октября 2019

Это разделит строку там, где есть какие-либо из них: + / * и создаст из нее массив:

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

Для ясности выложил код с вашим примером.

...