Ruby使用RegEx 在字符串中查找完整的数学表达式

我正在尝试编写一个程序,它将接受一个字符串并使用RegEx来搜索某些数学表达式,例如1 * 3 + 4/2。只有要查找的运算符是[ – * + /]。

至今:

string = "something something nothing 1/ 2 * 3 nothing hello world" a = /\d+\s*[\+ \* \/ -]\s*\d+/ puts a.match(string) 

生产:

 1/ 2 

我想抓住整个等式1/2 * 3.我基本上是全新的正则表达式世界,所以任何帮助将不胜感激!

新的消息:

 a = /\s*-?\d+(?:\s*[-\+\*\/]\s*\d+)+/ 

感谢zx81的回答。 我必须修改它才能工作。 由于某种原因,^和$不会为a.match(字符串)生成任何输出,或者可能是nil输出。 此外,某些运营商在他们之前需要一个\。

用于括号的版本:

 a = /\(* \s* \d+ \s* (( [-\+\*\/] \s* \d+ \)* \s* ) | ( [-\+\*\/] \s* \(* \s* \d+ \s* ))+/ 

正则表达式计算器

首先,您可能想看看有关正则表达式计算器 (RPN和非RPN版本)的这个问题。

但是我们没有处理括号,所以我们可以使用类似的东西:

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

见演示 。

说明

  • ^ anchor断言我们在字符串的开头
  • \s*允许可选空格
  • -? 允许在第一个数字之前选择减号
  • \d+匹配第一个数字
  • 非捕获组(?:\s*[-+*/]\s*\d+)匹配可选空格,运算符,可选空格和数字
  • +量词匹配一次或多次
  • $ anchor断言我们在字符串的末尾