我正在开发一个项目,其中用户输入一个人类可读的搜索字符串
AND OR 运算符。
我举三个例子
以上是我可能得到的输入样本。
我想获取该输入并将其转换为正则表达式。
这不是编译器的示例吗?看着它,我明白了
我想要做的是转换一个高级命令
进入低级别。你有什么建议吗
我怎么能做到以上几点?我想要的是,通过
正则表达式生成到 jsoup(伪选择器:matchesOwn)
并查询一个 html 文档。
感谢您的帮助。
最佳答案
这样做的一般方法是以易于遍历的数据结构的形式进行中间表示。这通常称为 AST。如果您不熟悉这个概念,请查看 calculator-ast它对计算器语言进行了这种转换。
为了将用户输入的字符串转换为 AST,您需要使用解析器。你可以看看antlr。我个人用的是v3,v4好像不太成熟。看看antlr3.org .如果你想自己编写解析器,你可以给一个 pratt parser一枪。这不是微不足道的,结合良好的错误处理需要时间,但它可以是一个有趣的练习。
一旦你有了一个 AST,通过遍历 AST 并在你进行时输出字符,将它变成一个正则表达式应该是微不足道的。
祝你好运!
关于regex - 将用户输入转换为正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448892/