Sea*_*iff 11 java regex parsing
我有一组字符串,其中嵌入了数字.它们看起来像/ cal/long/3/4/145:999或/ pa/metrics/CosmicRay/24:4:bgp:EnergyKurtosis.我想要一个表达式解析器
有趣的替代想法会很有用.我也很想要实现我需要的正则表达式子集以及数值约束.
谢谢!
没有理由重新发明轮子!正则表达式引擎的核心是建立在数学和计算机科学的坚实基础之上; 我们今天继续使用它们的原因是它们主要是合理的,并且在可预见的将来不会得到改善.
如果您确实找到或创建了一些替代解析语言,只涵盖了Regex可以实现的可能性的一部分,那么您很快就会有一个用户要求一个可以在Regex中表达的概念,但您的味道很简单.花时间解决尚未解决的问题!
我倾向于同意 Rex M 的观点,尽管你对数值约束的第二个要求使事情变得复杂。除非您只允许非常基本的约束,否则我不知道有一种方法可以在正则表达式中简洁地表达它。如果有这样的方法,请忽略我的其余答案并遵循此处的其他建议。:)
您可能需要考虑一个解析器生成器 - 比如经典的 lex 和 yacc。我不太熟悉 Java 选择,但这里有一个列表:
http://java-source.net/open-source/parser-generators
如果您不熟悉,标准方法是首先创建一个词法分析器,将字符串转换为标记。然后,您将这些标记传递到解析器,该解析器将您的语法应用于它们并输出某种结果。
在您的情况下,我设想解析器会产生正则表达式和附加条件的组合。对于您的数值约束示例,它可能会为您提供正则表达式\/cal/long/3/4/143:(\d+)\和应用于第一个分组(\d+部分)的约束,该分组要求数字位于 100 到 1100 之间。然后,您可以将 RE 应用于候选字符串,并将约束应用于这些候选人以找到您的匹配项。
这是一个非常复杂的方法,所以希望有一个更简单的方法。我希望这至少能给你一些想法。