Regex для нескольких вхождений определенных слов - PullRequest
0 голосов
/ 29 мая 2018

Hello

Я пытаюсь создать правило проверки, которое проверяет регулярное выражение на прием только определенных фраз.Regex основан на Java.

Вот примеры правильных входных данных:

1OR2 2 1 OR 2 OR 15 ( 2OR3) AND 1 (12AND13 AND1)OR(4 AND5) ((2AND3 AND 1)OR(4AND5))AND6 но я был бы рад, если бы только регулярное выражение могло принимать что-то вроде:

())34AND(4

Я понятия не имею, как создать регулярное выражение для проверки правильности открытия и закрытия скобок (они могут быть вложенными).Я предположил, что это невозможно проверить в регулярном выражении, поэтому правильная проверка скобок, которые я уже сделал в коде (реализация стека).В коде у меня есть второй шаг проверки фразы.

Все, что мне нужно сделать, это проверить, есть ли в фразе следующие конкретные вещи:

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

^[0-9 \\(][0-9 \\(\\)]*

также попытался добавить что-то вроде:

\\b(AND|OR)\\b

внутри второй парыскобок, но не повезло.

Я не могу понять, как исправить это, добавив слова OR и AND.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Поскольку у вас есть произвольное количество вложенных элементов, это, вероятно, невозможно с регулярным выражением.

Только для демонстрационных целей, это соответствует нулю или нескольким соединениям и одному набору скобок:

^\d+(\s*(?:AND|OR)\s*(\d+|\(?\s*\d+(\s*(?:AND|OR)\s*\d+)\s*\)))*$|^(\d+|\(?\s*\d+(\s*(?:AND|OR)\s*\d+)\s*\))\s*(\s*(?:AND|OR)\s*\d+)*$

Это оно.Добавление большего количества наборов и уровней вложенных скобок приводит к экспоненциально возрастающей сложности - пока она полностью не сломается.

Демо

0 голосов
/ 29 мая 2018

Я использовал следующее и сопоставил все введенные вами данные:

^[^\)][0-9 \( (AND|OR)]*$

Я предположил, что вы не хотите начинать с), поэтому я включил ^ [^ \)].

Если вы не знали, я использую https://www.regexpal.com, чтобы проверить мои регулярные выражения для кода.

...