2009-10-27 3 views

ответ

7

Похоже, вы пытаетесь сопоставить числовые выражения, например 5 + 7-3.

Это должно соответствовать им:

([-+]?[0-9]*\.?[0-9]+[\/\+\-\*])+([-+]?[0-9]*\.?[0-9]+) 
+0

Этот ответ не содержит скобки, упомянутые в вопросе. Что делать, если у вас есть операция (2 + 3) * (5/(7-1))? –

+0

Кроме того, неверно сказано, что '25 * (53 + 5' является действительным, а' 2 * (3) 'is not. Если вы хотите попробовать и найти больше: https://jsfiddle.net/a7eg9a78/ – abluejelly

5

Я думаю, что вы ищете классы символов

[0-9()+\-*/.] 

Это должно соответствовать слову, которое содержит любое число от 0 до 9 или (,), +, -,/или *

+1

+ - * недопустимый диапазон, положите '-' в конец, и он должен работать – Inshallah

+2

Я думаю, что '-' должен быть первым символом, например' [-0-9() + * /] ', no ? – Victor

+1

Да, я думаю, что решение - это классы символов, но в ответ на иншаллах не следует просто избегать «-»? Я понимаю, что в зависимости от системы (которая не указана OP), такие символы, как, например, могут иметь особые значения, на самом деле могут * и скобки. Я думаю, что OP будет лучше всего читать любую документацию, имеющуюся в его конкретной системе регулярных выражений. – nullpointer

5
[\d\(\)\+\-\*\/\.] 
+0

Хе-хе, все сбежали +1. – Inshallah

+1

Я не думаю, что вам нужно убежать (,), -, + и т. Д. В класс символов. Это зависит от lanaguage, не так ли? – Jaskirat

+0

@ Jass, в Perl, по крайней мере, вы правы. Однако вам нужно позаботиться о том, чтобы вы либо избежали '/', либо записывали регулярное выражение, как m ~ [\ d() + */.-] ~. – Inshallah

6

Принятый ответ не может обрабатывать множество основных случаев. Это должно сделать работу:

^([-+]? ?(\d+|\(\g<1>\))(?[-+*\/] ?\g<1>)?)$ 

Explaination:

Мы хотим, чтобы соответствовать всей строке:

^...$ 

Выражения могут иметь знак:

[-+]? ? 

Выражение состоит из нескольких цифр или другого действительного выражения, окруженного скобками:

(\d+|\(\g<1>\)) 

действительное выражение может сопровождаться операцией и другим действительным выражением и до сих пор является допустимым выражением:

(?[-+*\/] ?\g<1>)? 
1

Если вам нужно регулярное выражение, чтобы соответствовать арифметическое выражение как это: 3 + 2 -24 * 2/2-1 вы можете попробовать это:

String reg1="([0-9]+[\\+\\-\\*\\/]{1}[0-9]+)+([\\+\\-\\*\\/]{1}[0-9]+)*"; 

вы можете добавить кронштейн, где вы хотите, если вы будете редактировать это регулярное выражение.

+0

Я отметил вас Ответ был полезен, потому что это помогло мне в моей работе. Все выше сказанное мне не очень помогло. –

0

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

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