将数学表达式拆分为数组,而不必在括号和单引号之间拆分子表达式

赛义夫·阿尔罕默里(Saif Alhammouri)

假设我有以下字符串:

1 + 2 * (3 + (23 + 53 - (132 / 5) + 5) - 1) + 2 / 'test + string' - 52

我想将其拆分为运算符和非运算符的数组,但不得拆分()之间的任何内容'

我希望输出为:

[1, "+", 2, "*", "(3 + (23 + 53 - (132 / 5) + 5) - 1)", "+", 2, "/", "'test + string'", "-", 52]

我正在使用此代码:

preg_split("~['\(][^'()]*['\)](*SKIP)(*F)|([+\-*/^])+~", $str, -1, PREG_SPLIT_DELIM_CAPTURE);

该技术可以满足操作员和操作员的要求',但不能满足要求()但是,它仅保留(132 / 5)(最深的嵌套括号表达式)并拆分所有其他表达式,从而得到以下输出:

[1, "+", 2, "*", "(3", "+", "(23", "+", 53, "-", "(132 / 5)", "+", "5)", "-", "1)", "+", 2, "/", "'test + string'", "-", 52]

如何确保最外面的括号表达式及其所有内容在一起?

第四只鸟

您可以使用一种模式来递归匹配平衡括号的第一个子模式,然后使用“跳过失败”。轮换之后,您仍然可以使用捕获组,该组将是组2,并且由于该PREG_SPLIT_DELIM_CAPTURE标志而将保留这些值

要删除空条目,可以添加PREG_SPLIT_NO_EMPTY标志。

(?:(\((?:[^()]++|(?1))*\))|'[^']*')(*SKIP)(*F)|([+\-*/^])

正则表达式演示

$str = "1 + 2 * (3 + (23 + 53 - (132 / 5) + 5) - 1) + 2 / 'test + string' - 52";
$result = preg_split("~(?:(\((?:[^()]++|(?1))*\))|'[^']*')(*SKIP)(*F)|([+\-*/^])~", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

print_r($result);

输出

Array
(
    [0] => 1 
    [1] => +
    [2] =>  2 
    [3] => *
    [4] =>  (3 + (23 + 53 - (132 / 5) + 5) - 1) 
    [5] => +
    [6] =>  2 
    [7] => /
    [8] =>  'test + string' 
    [9] => -
    [10] =>  52
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript,正则表达式将字符串拆分为括号之间的多维数组

来自分类Dev

使用正则表达式将数学公式拆分为数组

来自分类Dev

正则表达式将长表达式字符串拆分为单个表达式的数组

来自分类Dev

如何将数学表达式拆分为标记?(字符串 -> [字符串])

来自分类Dev

C#将算术表达式拆分为string []

来自分类Dev

C#将算术表达式拆分为string []

来自分类Dev

将表达式字符串拆分为 ArrayList

来自分类Dev

正则表达式用于将字符串拆分为数组并替换数组的元素?

来自分类Dev

如何使用给定的正则表达式将字符串拆分为数组

来自分类Dev

Java正则表达式将String拆分为数字数组

来自分类Dev

Java:使用正则表达式将字符串拆分为char数组

来自分类Dev

如何使用给定的正则表达式将字符串拆分为数组

来自分类Dev

使用php中的正则表达式将字符串拆分为数组

来自分类Dev

在Python中将数学表达式字符串拆分为令牌

来自分类Dev

正则表达式-单引号之间的匹配空间

来自分类Dev

正则表达式替换单引号之间的空格

来自分类Dev

用于拆分字符串的正则表达式,使用空格,除非在引号和括号内

来自分类Dev

Python正则表达式拆分为字符,除非后面加上括号

来自分类Dev

熊猫:使用正则表达式清理包含单引号和括号的字符串列?

来自分类Dev

用数学表达式进行Java拆分

来自分类Dev

如何在Python中将表达式拆分为多行

来自分类Dev

正则表达式拆分为特定字符

来自分类Dev

正则表达式拆分为多个匹配项

来自分类Dev

正则表达式:按逗号分割,但括号和引号中不包括逗号(单引号和双引号)

来自分类Dev

正则表达式以添加逗号和单引号

来自分类Dev

正则表达式拆分括号组

来自分类Dev

如何使用正则表达式拆分字符串以在+,-,*和符号之间进行拆分?

来自分类Dev

提取单引号正则表达式和python之间的短语

来自分类Dev

提取单引号正则表达式和python之间的短语

Related 相关文章

  1. 1

    Javascript,正则表达式将字符串拆分为括号之间的多维数组

  2. 2

    使用正则表达式将数学公式拆分为数组

  3. 3

    正则表达式将长表达式字符串拆分为单个表达式的数组

  4. 4

    如何将数学表达式拆分为标记?(字符串 -> [字符串])

  5. 5

    C#将算术表达式拆分为string []

  6. 6

    C#将算术表达式拆分为string []

  7. 7

    将表达式字符串拆分为 ArrayList

  8. 8

    正则表达式用于将字符串拆分为数组并替换数组的元素?

  9. 9

    如何使用给定的正则表达式将字符串拆分为数组

  10. 10

    Java正则表达式将String拆分为数字数组

  11. 11

    Java:使用正则表达式将字符串拆分为char数组

  12. 12

    如何使用给定的正则表达式将字符串拆分为数组

  13. 13

    使用php中的正则表达式将字符串拆分为数组

  14. 14

    在Python中将数学表达式字符串拆分为令牌

  15. 15

    正则表达式-单引号之间的匹配空间

  16. 16

    正则表达式替换单引号之间的空格

  17. 17

    用于拆分字符串的正则表达式,使用空格,除非在引号和括号内

  18. 18

    Python正则表达式拆分为字符,除非后面加上括号

  19. 19

    熊猫:使用正则表达式清理包含单引号和括号的字符串列?

  20. 20

    用数学表达式进行Java拆分

  21. 21

    如何在Python中将表达式拆分为多行

  22. 22

    正则表达式拆分为特定字符

  23. 23

    正则表达式拆分为多个匹配项

  24. 24

    正则表达式:按逗号分割,但括号和引号中不包括逗号(单引号和双引号)

  25. 25

    正则表达式以添加逗号和单引号

  26. 26

    正则表达式拆分括号组

  27. 27

    如何使用正则表达式拆分字符串以在+,-,*和符号之间进行拆分?

  28. 28

    提取单引号正则表达式和python之间的短语

  29. 29

    提取单引号正则表达式和python之间的短语

热门标签

归档