我想使用正则表达式从包含SQL语句的字符串中提取“绑定变量”参数。在Oracle中,参数以冒号为前缀。
例如,像这样:
SELECT * FROM employee WHERE name = :variable1 OR empno = :variable2
我可以使用正则表达式从字符串中提取“variable1”和“variable2”吗?也就是说,获取所有以冒号开头并以空格,逗号或字符串结尾结束的单词。
(如果在SQL语句中多次使用相同的变量,我不在乎多次获得相同的名称;我可以稍后对其进行排序。)
答案 0 :(得分:4)
这可能有效:
:\w+
这只是意味着“冒号,后跟一个或多个word-class characters”。
这显然假设你有一个POSIX兼容的正则表达式系统,它支持word-class语法。
当然,这只匹配一个这样的引用。为了得到这两者,并跳过噪音,这样的事情应该有效:
(:\w+).+(:\w+)
答案 1 :(得分:3)
答案 2 :(得分:1)
如果你的正则表达式解析器支持单词边界,
:[a-zA-Z_0-9]\b
答案 3 :(得分:0)
尝试以下方法:
sed -e 's/[ ,]/\\n/g' yourFile.sql | grep '^:.*$' | sort | uniq
假设您的SQL位于名为“yourFile.sql”的文件中。
这应该给出一个没有重复的变量列表。