Как отделить математические операторы от чисел в строке - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь разделить операторы и значения типа float / int в строке.

Пример:

$input = ">=2.54"; 

Вывод должен быть:

array(0=>">=",1=>"2.54");.

Случаи операторов:>,> =, <, <=, = </p>

Я пробовал что-то вроде этого:

$input = '0.2>';
$exploded = preg_split('/[0-9]+\./', $input);

, но это не работает.

Ответы [ 3 ]

1 голос
/ 01 марта 2020

Вот рабочая версия, использующая preg_split:

$input = ">=2.54";
$parts = preg_split("/(?<=[\d.])(?=[^\d.])|(?<=[^\d.])(?=[\d.])/", $input);
print_r($parts);

Это печатает:

Array
(
    [0] => >=
    [1] => 2.54
)

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

(?<=[\d.])(?=[^\d.])  a digit/dot precedes and a non digit/dot follows
|                     OR
(?<=[^\d.])(?=[\d.])  a non digit/dot precedes and a digit/dot follows

То есть на границе раздела мы разделяем число, возможно десятичное, и арифметический c символ.

1 голос
/ 01 марта 2020

Если вы хотите разделить между операторами, вы можете использовать и чередование , чтобы сопоставить варианты операторов, и использовать \K, чтобы сбросить начальную точку сообщенного совпадения.

Это даст вам возможность разделиться. Затем подтвердите, используя lookarounds , что слева или справа есть ди git.

\d\K(?=[<>=])|(?:>=?|<=?|=)\K(?=\d)

Объяснение

  • \d\K(?=[<>=]) Соответствие ди git, забудьте, что было найдено, и подтвердите либо <, > или = справа
  • | Или
  • (?:>=?|<=?|=)\K(?=\d) Подберите оператора, забудьте, что было найдено, и подтвердите ди git справа

Regex demo | Php демо

Например

$strings = [
    ">=2.54",
    "=5",
    "0.2>"
];

$pattern = '/\d\K(?=[<>=])|(?:>=?|<=?|=)\K(?=\d)/';

foreach ($strings as $string) {
    print_r(preg_split($pattern, $string));
}

Выход

Array
(
    [0] => >=
    [1] => 2.54
)
Array
(
    [0] => =
    [1] => 5
)
Array
(
    [0] => 0.2
    [1] => >
)
1 голос
/ 01 марта 2020

Попробуйте:

$input = ">=2.54";
preg_match("/([<>]?=?) ?(\d*(?:\.\d+)?)/",$input,$exploded);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...