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

Alk*_*ris 5 regex expression jsoup

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

  1. a AND(b OR c) - >(?=.\ ba\b)(?=.(\ bb\b)|(\ bc\b)).*
  2. OR(b和c)
  3. (a或b)和(c或d)

以上是我可能获得的输入样本.我想获取该输入并将其转换为正则表达式.这不是编译器的样本吗?看着它,我看到我想要做的是将高级命令转换为低级命令.您对我如何完成上述工作有什么建议吗?我想要的是,将正在生成的正则表达式传递给jsoup(伪选择器:matchesOwn)并查询html文档.谢谢您的帮助.

Ale*_*ing 5

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

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

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

祝好运!

  • 是的!这些小语言是开始熟悉编译器技术和术语的好方法.玩得开心. (2认同)