如果操作包含其他变量,则不匹配

时间:2019-03-09 16:19:03

标签: php regex preg-match

我想使用正则表达式匹配包含相同变量的加法。

示例1

  

字符串:

     

5p + 3p

     

结果:

     

5p + 3p

示例2

  

字符串:

     

5AB + 3AB

     

结果:

     

5AB + 3AB

示例3

  

字符串:

     

5AB + 3BA

     

结果:

     

5AB + 3BA

示例4:

  

字符串:

     

5p + 3q

     

结果:

     

一无所有(根本不匹配)

我在下面创建了自己的正则表达式:

(\d+)(\w+)\+(\d+)(\w+)

但是我的正则表达式不满足上面的最后一个条件。

1 个答案:

答案 0 :(得分:0)

您可以将正则表达式与其他支票相结合:

/**
 * Checks a given string operation and only returns it if it's valid.
 * 
 * @param string $operation
 * @return string|null
 */
function checkOperation(string $operation): ?string
{
  // Make sure the operation looks valid (adjust if necessary)
  if (!preg_match('/^\d+([a-zA-Z]+)\+\d+([a-zA-Z]+)$/', $operation, $matches)) {
    return null;
  }

  // Make sure the left and right variables have the same characters
  if (array_count_values(str_split($matches[1])) != array_count_values(str_split($matches[2]))) {
    return null;
  }

  return $operation;
}

演示:https://3v4l.org/iS8Ih