PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 10 Февраля, 2021 - 19:53:34
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Подсобите с регуляркой. Нужно математическое выражение, например:

аb+4*(-x-222*b)+cbd

разбирать так, чтобы отдельно в лексемы попадали символьные переменные(из одного и больше символов, без цифр), цифровые константы из одной и более цифр и отдельно +, -, * ,(,).

Выражения могут быть на входе абсолютно разные по длине, набору пересчисленных операторов, с разными константами и переменными.
Это вообще возможно? Или тут нужно писать свою функцию?

(Отредактировано автором: 10 Февраля, 2021 - 20:36:52)

 
 Top
dcc0
Отправлено: 11 Февраля, 2021 - 01:06:22
Post Id


Участник


Покинул форум
Сообщений всего: 1032
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Доброго! Что-то типа такого? https://rextester[dot]com/CBOUY47630
В вашем примере символ "а" , видимо, русский символ.

P.s. на всякий случай за ошибки извиняюсь, с телефона.

(Отредактировано автором: 11 Февраля, 2021 - 07:30:07)

 
 Top
Perun
Отправлено: 11 Февраля, 2021 - 08:41:48
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




dcc0 пишет:
Что-то типа такого?

Почти..
Все лексемы должны быть в одном одномерном массиве и идти подряд, как они идут в выражении. Вместо одной лексемы *(-, должно быть три разных.

Т.е. должно быть:
[
ab,
+,
4,
*,
(,
-,
x,
-,
222,
*,
b,
),
+,
cbd,
]

(Отредактировано автором: 11 Февраля, 2021 - 08:52:06)

 
 Top
dcc0
Отправлено: 11 Февраля, 2021 - 11:10:39
Post Id


Участник


Покинул форум
Сообщений всего: 1032
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.  $str="ab+4*(-x-222*b)+cbd";
  5. preg_match_all("/[a-z]{1,}|[0-9]{1,}|[^0-9a-z]/", $str, $m);
  6. print_r($m);
  7. ?>
  8.  


Output:

CODE (html):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => ab
  6.             [1] => +
  7.             [2] => 4
  8.             [3] => *
  9.             [4] => (
  10.             [5] => -
  11.             [6] => x
  12.             [7] => -
  13.             [8] => 222
  14.             [9] => *
  15.             [10] => b
  16.             [11] => )
  17.             [12] => +
  18.             [13] => cbd
  19.         )
  20.  
  21. )

Так?

(Отредактировано автором: 11 Февраля, 2021 - 11:11:20)

 
 Top
Perun
Отправлено: 11 Февраля, 2021 - 11:17:28
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Да, спасибо.
 
 Top
Perun
Отправлено: 15 Февраля, 2021 - 14:40:29
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




А можно ли исходное выражение проверить с помощью РВ?
Условий получается очень много и сложных. Похоже на что то нереальное)

-В начале выражения может быть знак минус, может и не быть
-Любой операнд выражения может быть или переменой или константой
-Скобки могут быть в любом месте выражения.
-В конце/начале выражения не должно быть оператора кроме + или - в начале
-В середине выражения не должно идти подряд несколько операторов
-Скобки должны соответствовать открывающие закрывающим

Или это все нужно отдельно обрабатывать после разбиения на лексемы? Или делать отдельно проверку на соответствие каждому граничному условию?
Самая сложная часть- скобки..

(Отредактировано автором: 17 Февраля, 2021 - 16:06:22)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB