Php 正则表达式至少匹配一个符号和两个数字

Php 正则表达式至少匹配一个符号和两个数字,php,regex,math,Php,Regex,Math,我正在尝试编写一个正则表达式,用于PHP中的if语句,以检查字符串是否包含至少1+、-、*、或/和至少2个数字。它们之间可以有任意数量的空格 最好的方法是什么 我试着写一个正则表达式,如下所示,但这似乎与我的测试用例不匹配 我使用的正则表达式是:m/[0-9]{2,}[=-*/]+/ 以下是一些可以通过的测试用例: 2+2 5*3 6-8 我的最终目标是用PHP构建一个计算器,现在我正在尝试确定哪些输入是有效的数学输入/有效的数学表达式,哪些不是。这将匹配您的测试 /^ [0-9]+ #

我正在尝试编写一个正则表达式,用于PHP中的if语句,以检查字符串是否包含至少1+、-、*、或/和至少2个数字。它们之间可以有任意数量的空格

最好的方法是什么

我试着写一个正则表达式,如下所示,但这似乎与我的测试用例不匹配

我使用的正则表达式是:
m/[0-9]{2,}[=-*/]+/

以下是一些可以通过的测试用例:

  • 2+2
  • 5*3
  • 6-8

  • 我的最终目标是用PHP构建一个计算器,现在我正在尝试确定哪些输入是有效的数学输入/有效的数学表达式,哪些不是。

    这将匹配您的测试

    /^
    [0-9]+    # first number
    \s*       # any whitespace
    [+*\/-] # operand
    \s*       # any whitespace
    [0-9]+    # second number
    $/x
    

    <>你的正则表达式永远不会匹配单数,因为你使用的是代码>{ 2,} /COD>这意味着匹配一个字符2次或更多次。
    • #
      :分隔符
    • (\d+)
      :将一个数字匹配一次或多次,然后将其分组
    • \s*
      :将空格匹配零次或多次
    • ([+/*-])
      :将
      +
      -
      *
      /
      匹配一次并将其分组
    • \s*
      :将空格匹配零次或多次
    • (\d+)
      :将一个数字匹配一次或多次,然后将其分组
    • #
      :分隔符
    让我们在这里使用一些PHP Fu和我使用的一个函数:

    输出:

    2 + 2 = 4
    5 * 3 = 15
    6 - 8 = -2
    
    建议:

    对于负数、括号、log和cos/sin函数,这将变得相当复杂,因此最好使用解析器。

    Lex it而不是尝试regexp hacks。我强烈建议使用类似的方法。请注意,在字符类中不需要转义
    +*/
    ,但是你需要逃离<代码> ->代码>如果它在字符类的中间,否则它将指定一个范围!例如,
    8、5将得到匹配,因为根据。因此,如果使用
    [+*/-]
    ,则不需要转义
    -
    ,但请稍候,如果斜杠用作,则确实需要转义。@HamZa:Warning:preg_match():未知修饰符'-';)你要逃过这一劫吗dash@HamZa:很抱歉,这是由于之前的
    `before
    /`非常感谢您的解释和帮助!这帮了大忙。我在哪里可以找到PHP的数学解析器?@JayGatz抱歉,我不知道我尝试过的任何语法分析器,你也许应该搜索一个并尝试一下。另外,请谨慎使用eval()的解决方案,测试它们,因为它们可能有一些安全问题。@JayGatz好的,我问过了,下面是内容。
    2 + 2 = 4
    5 * 3 = 15
    6 - 8 = -2