Я пытаюсь извлечь только операнды, а именно. + - / и * из моего арифметического выражения.
Например: 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) ""
}
Мне просто нужен знак + на выходе.
Любая подсказка, что я делаю не так?
Ищете математический синтаксический анализатор на PHP? Попробуйте github.com/chriskonnertz/string-calc






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