我试图在R中编写一个函数,它使用正则表达式从SQL代码中识别表名。
我正在使用捕获组来识别在来自或加入之后找到的任何单词/ alpha-num表达式,但是 if 我的理解是正确的,捕获组只允许最后捕获的组可访问。
##sample SQL code:
mySql <- 'select all from table1 join table2 join table3 join new_table3'
##regex:
gsub('.*(from|join)\\s*([[:alnum:]]+_*[[:alnum:]]+).*', '\\1 : \\2', mySql)
##result is only the last table in SQL code:
##"join : new_table3"
但我想要的是所有要返回的表名,如下所示:
from : table1
join : table2
join : table3
join : new_table3
或者这甚至是正则表达式的有效用法,正如我认为的那样?
答案 0 :(得分:3)
你可以尝试
cat(gsub('.*?(from|join)\\s+([[:alnum:]_]+)', '\\1 : \\2\n', mySql))
#from : table1
#join : table2
#join : table3
#join : new_table3
答案 1 :(得分:2)
你通过添加?
使你的模式变得非贪婪(贪婪会尝试吃尽可能多的角色..这就是为什么你只得到最后的模式):
.*?(from|join)\\s+([[:alnum:]]+_*[[:alnum:]]+)
↑
请参阅DEMO