【问题标题】:Regular expression for: Nested parenthesis with operators [closed]正则表达式:带运算符的嵌套括号[关闭]
【发布时间】:2021-05-20 13:35:07
【问题描述】:

我在构建这个正则表达式时遇到了一些问题,也许你们知道正确的方法。

这里我给你一些我有输入的例子:

  • 1,(7|8),2,3
  • 1|(2,3)|4
  • (1,2)|(3|4)
  • 1,(2|(3,4)|(5|6))|8

我希望能够在使用 PHP7 时将其转换为 mysql 过滤器。预期为:

  • 1,(7|8),2,3: field = 1 and (field = 7 or field = 8) and field = 2 and field = 3
  • 1|(2,3)|4: field = 1 or (field = 2 and field = 3) or field = 4
  • (1,2)|(3|4):(field = 1 and field = 2) or (field = 3 and field = 4)
  • 1,(2|(3,4)|(5|6))|8:field = 1 and (field = 2 or (field = 3 and field = 4) or (field = 5 or field = 6)) or field = 8

将“,”替换为“AND”和“|”非常容易与 OR 但那不是我想要的。 出于安全原因,我需要验证递归级别和正在使用的每个值,但也要对它们进行转义。

需要递归。

我需要关于如何前进的建议。我非常感谢一些提示。

谢谢一百万

【问题讨论】:

  • 您能否提供一些代码,以便我们查看您的尝试?

标签: php mysql regex


【解决方案1】:

你认为regular这个词在正则表达式中是什么意思?

表示它可以匹配一个regular language,它是某一类语言或语法。计算机科学课程涵盖了这一点。它也应该在离散数学课程中提及。

嵌套括号是正则表达式无法解析的语言的教科书示例。要解析嵌套括号,您需要一个递归下降解析器,或者某种可以跟踪括号深度的解析器。例如,它可以使用计数器或堆栈来执行此操作。

但是正则表达式没有计数器变量,也没有堆栈。因此它无法验证具有嵌套结构的语言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2014-10-09
    • 2011-07-25
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多