2009-10-27 7 views

Répondre

7

Il semble que vous essayiez de faire correspondre des expressions numériques comme 5 + 7-3.

Cela devrait faire correspondre:

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

Cette réponse n'incorpore pas les crochets mentionnés dans la question. Que faire si vous avez une opération (2 + 3) * (5/(7-1))? –

+0

En outre, cela dit incorrectement '25 * (53 + 5' est valide et' 2 * (3) 'n'est pas.Si vous voulez essayer et trouver plus: https://jsfiddle.net/a7eg9a78/ – abluejelly

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

Je pense que vous êtes à la recherche pour les classes de caractères

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

Cela devrait correspondre à un mot qui contient un nombre de 0 à 9 ou (,), +, -,/ou *

+1

+ - * est une plage invalide, mettre le '-' à la fin et cela devrait fonctionner – Inshallah

+2

Je pense que le '-' devrait être le premier caractère, comme' [-0-9() + * /] ', non ? – Victor

+1

Oui je pense que la solution est des classes de caractères, mais en réponse à inshallah, ne devrait pas simplement échapper le '-' être suffisant? Ma compréhension est que selon le système (qui n'a pas été spécifié par OP), les caractères tels que celui-ci peuvent avoir des significations spéciales, en fait aussi *, et les parenthèses. Je pense que OP ferait mieux de lire toute la documentation pour son système regex particulier. – nullpointer

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

Hehe, tout s'est échappé +1. – Inshallah

+1

Je ne pense pas que vous devez échapper (,), -, + etc dans une classe de caractères. Cela dépend de la lanaguage n'est-ce pas? – Jaskirat

+0

@Jass, en Perl au moins vous avez raison. Vous devez cependant faire attention à ce que vous échappiez '/' ou écrivez l'expression rationnelle comme m ~ [\ d() + */.-] ~. – Inshallah

6

La réponse acceptée ne peut pas gérer un grand nombre de cas de base. Cela devrait faire le travail:

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

Explaination:

Nous voulons correspondre à la chaîne entière:

^...$ 

expressions peuvent avoir un signe:

[-+]? ? 

Une expression se compose de plusieurs chiffres ou d'une autre expression valide, entourée de crochets:

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

Une expression valide peut être suivie d'une opération et une autre expression valide et est encore une expression valide:

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

Si vous avez besoin d'une expression rationnelle pour correspondre à une expression arithmétique comme ceci: 3 + 2 -24 * 2/2-1, vous pouvez essayer ceci:

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

vous pouvez ajouter le support où que vous voulez si vous modifier cette regex.

+0

Je vous ai marqué répondre comme utile parce que cela m'a aidé dans mon travail.Toutes les réponses ci-dessus ne m'a pas aidé beaucoup.Merci. –

0

Cette regex m'aide, il suffit de prendre une note ici peut-être que cela aide les autres.

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