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

标签 regex expression jsoup

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

  • a AND (b OR c) -> (?=.\ba\b)(?=.(\bb\b)|(\bc\b)).*
  • a OR (b AND c)
  • (a 或 b) 与 (c 或 d)

  • 以上是我可能得到的输入样本。
    我想获取该输入并将其转换为正则表达式。
    这不是编译器的示例吗?看着它,我明白了
    我想要做的是转换一个高级命令
    进入低级别。你有什么建议吗
    我怎么能做到以上几点?我想要的是,通过
    正则表达式生成到 jsoup(伪选择器:matchesOwn)
    并查询一个 html 文档。
    感谢您的帮助。

    最佳答案

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

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

    一旦你有了一个 AST,通过遍历 AST 并在你进行时输出字符,将它变成一个正则表达式应该是微不足道的。

    祝你好运!

    关于regex - 将用户输入转换为正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15448892/

    相关文章:

    php - 正则表达式 24 小时时间

    javascript - 需要匹配表达式

    r - 通过解析或表达式定义表达式之间的区别

    java - 如何使用Jsoup解析给定选择范围内的元素?

    regex - 查找并替换为可变文本

    php - 从php中的字符串中删除俄语字母

    c# - 使用反射创建一个 Expression<Func<,>>

    java - 任何 Javascript 都会阻止我的程序抓取此页面

    java - 如何删除除 witelisted 标签 JSOUP 之外的所有标签

    python - 无法替换 Python pandas 数据框中的特殊字符