Как получить только операнды с регулярным выражением

Я пытаюсь извлечь только операнды, а именно. + - / и * из моего арифметического выражения.

Например: A + B должен вернуть мне +

Я пробовал использовать несколько следующих регулярных выражений, но всегда получаю массив из трех элементов:

Выражение №1:

print_r (var_dump(preg_split ( "/([\w\s]*[^\-\+/\*])/", "A+B" )), TRUE);

Выход:

array(3) {
  [0] =>
  string(0) ""
  [1] =>
  string(1) "+"
  [2] =>
  string(0) ""
}

Выражение №2:

print_r (var_dump(preg_split ( "/(?!\+|\-|\*|/)[\w\s]+/", "A+B" )), TRUE);

Выход:

array(3) {
  [0] =>
  string(0) ""
  [1] =>
  string(1) "+"
  [2] =>
  string(0) ""
}

Мне просто нужен знак + на выходе.

Любая подсказка, что я делаю не так?

Почему ваши выкройки такие сложные? Каковы фактические правила добычи? Если вы просто хотите сопоставить один оператор в строке, используйте preg_match('~[*/+-]~', $s, $matches). Используйте preg_match_all, чтобы получить все вхождения.

Wiktor Stribiżew 23.06.2018 18:56

Ищете математический синтаксический анализатор на PHP? Попробуйте github.com/chriskonnertz/string-calc

wp78de 24.06.2018 00:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как сказал Виктор, вам лучше использовать preg_match, но если вы действительно хотите использовать preg_split, используйте флаг PREG_SPLIT_NO_EMPTY и упростите свое регулярное выражение:

print_r (var_dump(preg_split ( "/[\w\s]/", "A+B", -1, PREG_SPLIT_NO_EMPTY )), TRUE);

Выход:

array(1) {
  [0]=>
  string(1) "+"
}

Вы можете использовать preg_match_all:

preg_match_all ( "/([\^\-\+/\*])/", "A+B", $result );
$result = $result[0];
print_r($result);

Результат:

Array ( [0] => + )

Пожалуйста, не давайте ответ прямо из комментариев.

Toto 23.06.2018 19:14

Другие вопросы по теме