用于数学运算的 PHP 正则表达式

Mik*_*ike 3 php regex

所以我试图创建一个正则表达式但没有成功。

这是我在输入字符串中得到的:

String A: "##(ABC 50a- {+} UDF 69,22g,-) {*} 3##"
String B: "##ABC 0,10,- DEF {/} 9 ABC {*} UHG 3-##"
Run Code Online (Sandbox Code Playgroud)

这就是我需要从正则表达式中处理的内容:

Result A: "(50+69,22)*3"
String B: "0,10/9*3"
Run Code Online (Sandbox Code Playgroud)

我只是无法将数字替换与操作符号结合起来。

这是我得到的:

'/[^0-9\+\-\*\/\(\)\.]/'
Run Code Online (Sandbox Code Playgroud)

感谢每一个帮助。

Luc*_*ski 5

一个简单的解决方案是摆脱你不想要的一切。

所以替换这个:

\{(.+?)\}|[^0-9,{}()]+|(?<!\d),|,(?!\d)
Run Code Online (Sandbox Code Playgroud)

$1.

足够简单:

$input = "(ABC 50a- {+} UDF 69,22g,-) {*} 3";
$output = preg_replace('#\{(.+?)\}|[^0-9,{}()]+|(?<!\d),|,(?!\d)#', '$1', $input);
Run Code Online (Sandbox Code Playgroud)
  • \{(.+?)\}部分匹配里面的所有内容{......}并输出它(它被替换为$1
  • [^0-9,{}()]+ 删除不属于我们要保留的字符的每个字符(它被替换为空字符串)
  • (?<!\d),|,(?!\d) 抛出不属于数字的逗号

不幸的是,如果没有更好的规范,我不能说太多。