正则表达式非捕获括号问题
问题描述:
我有一个数据库查询,看起来像这样正则表达式非捕获括号问题
select * from students join (select * from teachers) join (select * from workers
我有一个要求来标记基于“选择”这个字符串。 我正在尝试使用正则表达式(select)(.*?)((?:select)|$)
,它只匹配2次。 请求一些关于如何实现这一点的指针。
我需要3个输出记号如下
select * from students join (
select * from teachers) join (
select * from workers
答
我认为这正则表达式将工作:
select.*?(?=select|$)
正则表达式字select
,那么任何文本相匹配(不包括新线)直到下一个select
或字符串的末尾。
答
如果你试图解析字符串中的SELECT查询,那么你可以使用这个正则表达式。假设你是不是做选择从多个表(即不这样做select * from x,y,z
)
(select.*?from\\s+\\w+)
结果标记的外观应该如何? –
预期结果是什么?请将其添加到您的帖子。 –
在'(?:select)'中,非捕获括号是无用的......可能是'(select)'中的括号。你为什么把它们放在这里? – Robin