java 正则表达式 关于递归嵌套的实现问题 求教各路大神

徐阳Anyway 2014-11-18 01:16:32
目前需求是这样的,想用一个正则表达式来验证如下的表达式是否符合规则

(a.2 && (c || d.3)) requires (e mutex f)

类似上述的表达式, 但是这个只是简单的举例, 其中&& || requires mutex等都是固定的运算符
其中 a.2 c d.3 e f 都是某些允许的运算对象值, 但是在复杂的情况下每一个对象值都可能被再次替换为一个表达式
比如 a.2 可能会被替换为(m.5 && n)那么之前的表达式就是

( (m.5 && n) && (c || d.3) ) requires (e mutex f)

以此类推会很深的一个层次, 而这个算式可能会是用户手填自定义,所以难免填错
求高手帮解析一个正则表达式来验证是否填的对,是否符合规则

不知道表述的是否清晰~~~~不明白的地方问我哈, 拜托~
...全文
287 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
徐阳Anyway 2015-01-15
  • 打赏
  • 举报
回复
没有满意答案,最后用antlr词法语法分析器解决
wyc_ 2014-11-19
  • 打赏
  • 举报
回复
如果说按照递归做的话,到最内层括号里面,就只有类似于c || d.3&&d等形式了,这个时候直接用正则表达式还不是很好写,可以反面考虑不合法的情况,一种是没有运算符或者连续两个或者多个运算符连在一起的情况(如果考虑到把&&写成&或者||写成|的情况还需要处理)。 其中第一个可以直接用字符串的查找函数,第二个的正则表达式直接写还是没想到,因为涉及到单词,不像四则运算加减乘除都是一个字符,不过可以先把其中的运算符全部用一个特殊字符替换,比如+,这时再判断相邻就简单了。
徐阳Anyway 2014-11-19
  • 打赏
  • 举报
回复
引用 1 楼 cumtwyc 的回复:
首先是括号匹配,如果不匹配直接返回假。如果匹配则判断里面的格式,判断格式跟四则运算是一样的,然后就是递归这个过程。这个跟表达式的判断基本上是一样的,严蔚敏数据结构那本书上有讲到。可以搜一下源码,修改一下。
原理明白些, 就是不会写这个正则和递归的过程。 能帮实现个正则表达式吗
wyc_ 2014-11-18
  • 打赏
  • 举报
回复
首先是括号匹配,如果不匹配直接返回假。如果匹配则判断里面的格式,判断格式跟四则运算是一样的,然后就是递归这个过程。这个跟表达式的判断基本上是一样的,严蔚敏数据结构那本书上有讲到。可以搜一下源码,修改一下。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧