2016-01-15 3 views
-2

Я написал эту картину:Найти скобки в регулярном выражении

final String FRACTION_PATTERN = "^([n0-9\\-\\+\\(\\)]+)/([0-9]+)$"; 

Для того, чтобы соответствовать таким выражениям, как: п + 2/6 или (п-3)/4

Когда я использую круглые скобки, нет совпадения. Что я делаю неправильно?

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

Спасибо!

+0

Что делать, если вы используете '([n0-9 +() -]' в качестве первой группы? – npinti

+2

[Ваше регулярное выражение соответствует примерам] (https://regex101.com/r/uH5kW3/1). что ваше регулярное выражение должно обрабатывать. –

+1

Вы используете неправильный инструмент для задания. Вы не можете анализировать общие арифметические выражения с помощью технологии регулярных выражений. Вам нужен парсер. – EJP

ответ

-1

Поставьте знак минус перед таким образом это не имеет значения диапазона

^([-n0-9\\-\\+\\(\\)]+)/([0-9]+)$ 

Обратите внимание на четвёртом характере регулярных выражений

Существует также некоторая избыточность в классе символов. Это упрощение:

^([-n0-9+\\()]+)/([0-9]+)$ 
+0

Это не имеет значения диапазона в регулярном выражении OP –

+0

Ваши регулярные выражения такие же, как и у OP, только с меньшим ускорением. –

+0

@stribizhev Когда вы ставите тире - как первый символ в t он класс будет соответствовать тире и потеряет смысл для указания диапазона. OP хочет совместить тире, буквально глядя на второй пример. – buckley

1

Я написал эту картину:

final String FRACTION_PATTERN = "^([n0-9\\-\\+\\(\\)]+)/([0-9]+)$";

Для того, чтобы соответствовать такие выражения, как: п + 2/6 или (п-3)/4

Остановитесь прямо здесь!

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

Это доказано в 1950-х годах. Вам нужен парсер. Обратитесь к Shunting-yard algorithm Dijkstra, или recursive descent expression parser.

+0

Я не думаю, что это ответ. Если вы хотите предложить использовать другую библиотеку, вы должны сделать это в комментарии. –

Смежные вопросы