Java Regex для формального формата логики - PullRequest
0 голосов
/ 06 декабря 2018

Я ищу соответствие строки формату выражения в формальной логике, где два алфавитных символа оперируются с помощью v | ^ |> | =, где символам может предшествовать ~ |! |?, И гдесимволы могут быть заключены в квадратные скобки, а перед ними снова стоит ~ |! | ?.Сначала я подумал, что это может сделать следующее выражение:

 s.matches("^[!?~]*[(]*[!?~]*[a-z]{1}\\s[v>=^]{1}\\s[!?~]*[a-z]{1}[)]*$")

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

Примеры допустимых совпадений:

~ pvq

~? (P ^ ~ r)

! P

pv ~ (!r ^ t)

~! (p = (~! q ^ t))

Можно добавить столько операторов, сколько вы хотите, чтобы создать чрезвычайно длинное выражение.Как мне объяснить это с помощью регулярного выражения в общем формате?

Спасибо, куча:)

1 Ответ

0 голосов
/ 06 декабря 2018

Вы не можете полностью описать этот язык простым регулярным выражением.Проблема в том, что любая буква может быть заменена выражением.Вам нужны рекурсивные регулярные выражения, и они не поддерживаются пакетом Java java.util.regex.

Это функция, которая, насколько мне известно, была запущена в Perl 4 или около того и появилась в нескольких пакетах с рекламой "Perl-совместимых регулярных выражений" (PCRE).Он не является частью стандартной Java, Python, Ruby, C ++, и я не верю, что библиотеки .NET для C #, VB.Net, C ++ / CLI и т. Д. Также имеют его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...