日期:2014-05-17  浏览次数:20923 次

求个简单的分组正则
如:如果《2》那么《如果《3》那么《如果《4》那么《如果《5》那么《如果《6》那么《6》否则《7》》否则《6》》否则《5》》否则《4》》否则《3》+如果《30》那么《40》否则《50》如果《300》那么《400》否则《500》

第一次提取的时候我想提取到:
如果《2》那么《如果《3》那么《如果《4》那么《如果《5》那么《如果《6》那么《6》否则《7》》否则《6》》否则《5》》否则《4》》否则《3》

如果《30》那么《40》否则《50》

如果《300》那么《400》否则《500》

后面的是组里循环,如果上面的解决了,应该都好处理。求大侠帮忙

------解决方案--------------------
引用:
如:如果《2》那么《如果《3》那么《如果《4》那么《如果《5》那么《如果《6》那么《6》否则《7》》否则《6》》否则《5》》否则《4》》否则《3》+如果《30》那么《40》否则《50》如果《300》那么《400》否则《500》

第一次提取的时候我想提取到:
如果《2》那么《如果《3》那么《如果《4》那么《如果《5》那么《如果《6》那么《6》否则《7》》否则《6》》否则《5》》否则《4》》否则《3》

如果《30》那么《40》否则《50》

如果《300》那么《400》否则《500》

后面的是组里循环,如果上面的解决了,应该都好处理。求大侠帮忙

下面的正则应当可以实现你的需求:
如果((?<open>《)
------解决方案--------------------
(?<-open>》)
------解决方案--------------------
.)+?(?(open)(?!))(?=(如果
------解决方案--------------------
$))

上面的正则将“如果。。。。那么。。。。否则。。。。”组来匹配,我觉得直接将每个分支作为结果来匹配(即“如果。。。。那么”、“那么。。。。否则”和“否则。。。。。。”)能更好的实现这个字符串的解析。
(?<=(如果
------解决方案--------------------
那么
------解决方案--------------------
否则))((?<open>《)
------解决方案--------------------
(?<-open>》)
------解决方案--------------------
.)+?(?(open)(?!))(?=(如果
------解决方案--------------------
那么
------解决方案--------------------
否则
------解决方案--------------------
$))