我正在尝试编写一个正则表达式,它将挑选出“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/