regex - 持续模式匹配来识别 SQL 子句

标签 regex r

我正在尝试在 R 中编写一个函数,该函数使用正则表达式从 SQL 代码中识别表名。

我正在使用捕获组来识别在 fromjoin 之后找到的任何单词/字母数字表达式,但是如果我的理解是正确的,捕获组只允许访问最后捕获的组。

##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

或者这是否是正则表达式的有效使用,正如我认为的那样?

最佳答案

你可以试试

cat(gsub('.*?(from|join)\\s+([[:alnum:]_]+)', '\\1 : \\2\n', mySql))
#from : table1
#join : table2
#join : table3
#join : new_table3

关于regex - 持续模式匹配来识别 SQL 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679886/

相关文章:

python - 正则表达式用于搜索文本文件中的域

c# - RegEx 仅从 CSS 文件中提取选择器?

java - 正则表达式 - 替换仅包含一个但重复字符的字符串

regex - shell 脚本中的安全 rm -rf 函数

r - R 中的 as.numeric 有什么问题?

PHP:PCRE: 如何替换可重复的字符

r - 在列表列中追加缺失的项目

R auto.arima "No ARIMA model able to be estimated"

r - 使用双矩阵查找填充数据框中的新列

RSQLite loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) 中出现错误 : namespace ‘DBI’ 0. 4-1 正在加载,但需要 >= 0.8