【问题标题】:RegEx for mathematical expressions数学表达式的正则表达式
【发布时间】:2014-06-02 11:24:54
【问题描述】:

我正在尝试对 bash 脚本中的用户输入进行比较/搜索。我希望用户能够输入函数,计算并返回函数...如何知道组在字符串中的位置,以便我可以保持井井有条?

calculate 7 + 3
calculate 9.37 / 7.21
calculate 5 100 * 2.21
calculate 2783.34 – 25  

calculate -g hypotenuse 2.34 5.1   #-g argument for geometric
calculate -p 34.34/343             #-p argument for precision

calculate -g hypotenuse -p 2.34 5.1   #geometric and precision

编辑:按组,我想我的意思是“令牌”。

例如:我知道的事情: ([-])([0-9])([.]*)([0-9]{1,}) 定义整数或实数

([0-9]{1,}) 定义整数

如何获取token在字符串中的位置,如何获取操作符?

【问题讨论】:

  • 欢迎来到stackoverflow!不清楚你在问什么。你试过什么?您能在这种情况下定义“组”的含义吗?
  • 感谢您的欢迎!
  • 也许你只需要bc ?

标签: regex bash shell unix scripting


【解决方案1】:

正如我上面所说,您可以使用bc 来执行算术运算。这可能是最好的解决方案,因为 bash 本身只能进行整数数学运算。

如果你想得到浮点数的整数和小数部分,你可以使用以下代码:

a=123.456 # an example
a_int=${a%.*}
a_fr=${a#*.}

在您的示例中,每个“组”都表示为一个参数,即:

print_args() {
    for a in "$@"; do
        echo "arg=\"$a\""
    done
}
print_args 9.37 / 7.21

将打印

arg="9.37"
arg="/"
arg="7.21"

【讨论】:

  • +1 用于弄清楚 OP 可能要问什么。由于问题中提到了 "geometric" 和 "precision",因此可能值得一提的是 bc -l 来加载 "mathlib" 和 scale 变量。
  • 欣赏!很抱歉造成混乱 - 感谢您的扩展!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多