正则表达式提取以冒号开头的所有单词

时间:2009-10-13 08:04:32

标签: regex

我想使用正则表达式从包含SQL语句的字符串中提取“绑定变量”参数。在Oracle中,参数以冒号为前缀。

例如,像这样:

SELECT * FROM employee WHERE name = :variable1 OR empno = :variable2

我可以使用正则表达式从字符串中提取“variable1”和“variable2”吗?也就是说,获取所有以冒号开头并以空格,逗号或字符串结尾结束的单词。

(如果在SQL语句中多次使用相同的变量,我不在乎多次获得相同的名称;我可以稍后对其进行排序。)

4 个答案:

答案 0 :(得分:4)

这可能有效:

:\w+

这只是意味着“冒号,后跟一个或多个word-class characters”。

这显然假设你有一个POSIX兼容的正则表达式系统,它支持word-class语法。

当然,这只匹配一个这样的引用。为了得到这两者,并跳过噪音,这样的事情应该有效:

(:\w+).+(:\w+)

答案 1 :(得分:3)

为了能够自己处理这样一个简单的案例,你应该看看regex quickstart

同时使用:

:\w+

答案 2 :(得分:1)

如果你的正则表达式解析器支持单词边界,

:[a-zA-Z_0-9]\b

答案 3 :(得分:0)

尝试以下方法:

sed -e 's/[ ,]/\\n/g' yourFile.sql | grep '^:.*$' | sort | uniq

假设您的SQL位于名为“yourFile.sql”的文件中。

这应该给出一个没有重复的变量列表。