2015-04-24 1 views
2

Je, essayant d'écrire une expression régulière pour vérifier si la chaîne donnée est comme a + b, 2 + a + b, 3 + 6 * 9 + 6 * 5 + a * b, etc. ...Expression régulière pour l'expression arithmétique

Seuls les opérateurs + et *.

J'ai essayé

if (str.matches("(\\d|\\w \\+|\\*){1,} \\d|\\w"))

Malheureusement, il ne gère que des cas comme 3 * 7 ... (numérique * numérique).

En attente de vos réponses, merci de me lire.

+0

La classe de caractères (ala) @AvinashRaj est nettement mieux. Purement à des fins éducatives, le problème avec votre utilisation de la barre verticale est que vous n'avez pas regroupé les choses avant et après. Si vous voulez '\\ + | \\ *', vous devez les grouper comme '(?: \\ + | \\ *)'. Même chose avec le '\\ d | \\ w' bien que ce ne soit pas si important puisque \\ w inclut \\ d. –

Répondre

2

Mettez * et + dans une classe de caractères.

str.matches("\\w(?:\\s[+*]\\s\\w)+"); 

DEMO

+0

En effet, il semble fonctionner. Tank you – MedAl

+0

@MedAl puisque vous êtes nouveau sur StackOverflow, je vous suggère de lire [this] (http://stackoverflow.com/help/accepted-answer) –

1

Cela traitera des cas de calculs simples et enchaînées

[0-9A-Za-a]*(){0,}([+-/*](){0,}[0-9A-Za-a]*(){0,})* 

Cela correspondra, par exemple

  • 1 + 2
  • 1 + 2
  • 1 + a * 14/9

(Vous pouvez changer les opérateurs que vous voulez en mettre à jour [+-/*])

+0

Pourquoi tous les '{0,}' au lieu de simplement ' * '? –

+0

Puisque vous avez '*' 'au lieu de' + 'après le' [0-9a-z] 'votre re va aussi correspondre' + 'ou' + - */'ou etc –

+0

C'est'() {0,} ' donc ça permet des espaces optionnels - et seulement des espaces - entre les opérandes –