java - 棘手的 Java 正则表达式来自 .. where

标签 java regex

我正在尝试编写一个正则表达式,它将挑选出“from”和“where”之间的所有单词(即查询中的原始表名称)。

以下内容不起作用,实际上只是卡在输入上,根本没有“来自”。

"from(?:\\W*|(\\w*))*?where"

回应建议无约束回溯的评论,更改为

"from(?:\\W*+|(\\w*+))*?where"

不再挂起。但应用于

时与“obj”(仅“部分”)不匹配
select from obj, part where ...

任何人都可以看到它的问题吗?或者更好的方法?代码只是

Matcher match = ckPattern2.matcher(query); // Hangs here.
while (match.find())
  for (int gx = 1; gx <= match.groupCount(); gx++)
    String ck = match.group(gx); ...

(我的解决方法是将其拆分为单词,然后使用程序逻辑进行过滤。但我讨厌被正则表达式打败!)

最佳答案

这是一个解析问题,而不是扫描问题。您无法使用单个正则表达式来解决它。您需要扫描标记、标点符号和空格,并保留需要的内容并丢弃不需要的内容。您将需要用于标记、标点符号和空格的正则表达式。不仅仅是一个 RE。

关于java - 棘手的 Java 正则表达式来自 .. where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862806/

相关文章:

java - 命令查询分离模式示例

python - 在正则表达式模式中获取捕获组的起始位置

python - 解析具有各种特殊字符的消息并拆分为列表(re 和 regex)Python 2.7

Python: "FOR"循环打印基于行的列字段匹配

java - 与任何语言的 java 8 正则表达式字符串匹配

java - 如何单独解析并执行文件中的所有 SQL 语句?

java - 自动更新 Android 应用程序,无需用户点击

java - Java FileWriter 的 "Persistent streams"?

java - 如何使用图片的 url 来显示图片?

java - 流水线排程递归解决错误