表达式解析器正则表达式

时间:2019-02-28 12:26:41

标签: regex regex-lookarounds regex-group

我有多种表达方式

c1|<|5&&c2|>=|750&&c3|=|1
c1|<|5&&(c2|>=|750||c3|=|1)
c1|<|5&&(c2|>=|750||c3|=|1)&&c4|=|1
c1|<|5&&c2|>=|750||c3|=|1&&c4|=|1
(c1|<|5||c2|>=|750||c3|=|1)&&c4|=|1

有什么方法可以让正则表达式获取每个运算符&&和||之前的条件。喜欢:

  

c1 | <| 5 && c2 |> = | 750 && c3 | = | 1->(c1 | <| 5)&&(c2 |> = | 750)&&(c3 | = | 1)

     

c1 | <| 5 &&(c2 |> = | 750 || c3 | = | 1)->(c1 | <| 5)&&((c2 |> = | 750)||(c3 | = | 1 ))

     

c1 | <| 5 &&(c2 |> = | 750 || c3 | = | 1)&& c4 | = | 1->(c1 | <| 5)&&((c2 |> = | 750)||   (c3 | = | 1))&&(c4 | = | 1)

因此,理想情况下,我们在前两种情况下应获得3个条件,而在后一种情况下应获得4个条件。任何帮助都将真正有用。

1 个答案:

答案 0 :(得分:0)

不清楚您想要什么,但是此sed命令将您的示例输入转换为示例输出:

sed -e 's/\&\&\|||/) & (/g;s/.*/(&)/'

如果要解析表达式(例如,您的几个示例都包含嵌套的括号(大概表示优先级)),则不应使用正则表达式引擎。实现Dijkstra's shunting yard algorithm来处理这种类型的输入很简单。