正则表达式非捕获括号问题

时间:2014-02-07 11:35:24

标签: regex

我有一个看起来像这样的数据库查询

select * from students join (select * from teachers) join (select * from workers

我要求根据'select'对此字符串进行标记。 我正在尝试正则表达式(select)(.*?)((?:select)|$),它只匹配2次。 请求一些关于如何实现这一目标的指示。

我需要3个输出令牌,如下所示

  • select * from students join (
  • select * from teachers) join (
  • select * from workers

2 个答案:

答案 0 :(得分:2)

我认为这个正则表达式会起作用:

select.*?(?=select|$)

正则表达式匹配单词select,然后匹配任何文本(不包括新行)直到下一个select或字符串结尾之前。

此处示范:http://regex101.com/r/sR3gV1

答案 1 :(得分:0)

如果您尝试解析字符串中的选择查询,则可以使用此正则表达式。假设您没有从多个表中进行选择(即不执行select * from x,y,z

(select.*?from\\s+\\w+)