2010-05-28 5 views
0

Comment définir l'expression régulière de expression.please mathématique définir une expression régulière commune pourdans la définition expression régulière

5+4 
5-3 
5*6 
6/2 
+1

l'expression mathématique peut-elle être plus compliquée ou juste numéro d'opérateur de numéro? –

+1

vous voulez autoriser des espaces entre les nombres et les opérateurs? les décimales sont-elles supportées? – Amarghosh

+0

Votre "question" manque beaucoup de détails. Qu est ce que tu veux faire avec? avez-vous besoin de capturer une partie de l'expression ou de la diviser? Lorsque vous écrivez des questions, vous devriez essayer d'ajouter autant de détails que possible, aidez-nous à vous aider. –

Répondre

0
^\d+[+*\-/]\d+$ 
+4

'+' n'est pas un méta-caractère à l'intérieur d'une classe de caractères - ne doit pas être échappé. '-' est un méta-caractère à l'intérieur d'une classe de caractères et doit être échappé sauf s'il s'agit du premier ou du dernier caractère de la classe. '^ \ d + [+ */-] \ d + $' ou '^ \ d + [+ * \ - /] \ d + $' ou '^ \ d + [- + * /] \ d + $' – Amarghosh

+0

vous avez raison:) mon mauvais –

+1

'(\ d) +' va correspondre et capturer un chiffre à la fois, ainsi seul le dernier chiffre est retenu. Si vous voulez capturer le nombre entier, placez le signe plus à l'intérieur des parens: '(\ d +)'; Si vous ne voulez pas le capturer, débarrassez-vous des parens car ils créent juste beaucoup de travail supplémentaire pour le moteur regex. –

4

Ok, voici un qui pourrait être un peu plus compliqué que vous avez besoin (hé, c'est une expression régulière!)

/^\s*-?\d+(?:\.\d+)?(?:\s*[+*\/\-]\s*-?\d+(?:\.\d+)?)+(?:\s*=\s*-?\d+(?:\.\d+)?)?$/ 

il permet une ou plusieurs opérations, des nombres décimaux, et éventuellement un « égal à » une partie à la fin.

5 + 7 
3 * 2 - 8 
80.31 + 12/6 
5 * 7 - 2 = 33 
+0

'' Il ne supporte pas les nombres négatifs '' – Amarghosh

+0

@Amarghosh: fixe! – nickf

0

La spécification est vague, mais voici une expression rationnelle lisible utilisant une approche méta-regexing en Java.

String regex = 
     "num(?:opnum)*" 
      .replace("op", "\\s*[*/+-]\\s*") 
      .replace("num", "\\s*[+-]?\\d+(?:\\.\\d+)?\\s*"); 
    String[] tests = { 
     "5+4",   // true 
     "5 - 3",  // true 
     "5 * 6 - 4", // true 
     "3.14159 = 0", // true 
     "A = B",  // false 
     "5+ -4",  // true 
     "5 * +4",  // true 
     "5++5",   // true 
     "5+++5",  // false 
     "5+5+"   // false 
    }; 
    for (String test : tests) { 
     System.out.println(test + " " + test.matches(regex)); 
    } 

Les nombres peuvent inclure une partie décimale facultative, et un signe +/-. Il pourrait y avoir plusieurs égalités.