将用户输入转换为正则表达式

时间:2013-03-16 11:48:29

标签: regex expression jsoup

我正在开发一个用户输入人类可读搜索字符串的项目 AND OR运算符。 我举三个例子

  1. a AND(b OR c) - > (?= \ BA \ B)(?= (\ BB \ B)|(\ BC \ B))。*
  2. a OR(b AND c)
  3. (a OR b)AND(c OR d)
  4. 以上是我可能获得的输入样本。 我想获取该输入并将其转换为正则表达式。 这不是编译器的样本吗?看着它,我明白了 我想要做的是转换高级命令 进入低级别。你有什么建议吗? 我怎么能完成上述事情?我想要的是,通过 正则表达式生成jsoup(伪选择器:matchesOwn) 并查询一个HTML文档。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:5)

这样做的一般方法是以易于遍历的数据结构的形式进行中间表示。这通常称为AST。如果您不熟悉这个概念,请查看为计算器语言进行此转换的calculator-ast

为了将用户输入字符串转换为AST,您需要使用解析器。你可以看一下antlr。我个人使用v3,v4似乎不太成熟。看看antlr3.org。如果你想自己编写解析器,你可能会pratt parser一个镜头。这不是微不足道的,并且结合良好的错误处理需要时间,但它可以是一个有趣的练习。

一旦你有了AST,把它变成一个正则表达式应该是通过遍历AST并输出字符来实现的。

祝你好运!