2009-10-13 142 views
2

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

例如,像这样:

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

我可以使用正则表达式来提取字符串“变量1”和“变量2”?也就是说,获取所有以冒号开头并以空格,逗号或字符串结尾结尾的单词。

(如果我多次得到相同的名称,如果相同的变量在SQL语句中多次使用我不在乎,我以后可以排序了这一点。)

回答

3

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

对于同时使用:

:\w+ 
4

这可能会实现:

:\w+ 

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

这显然假定你有一个POSIX兼容的正则表达式系统,它支持单词的语法。

当然,这只能匹配一个这样的参考。两者都要,并跳过噪音,这样的事情应该工作:

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

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

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

':'已经是一个单词边界,所以你可以跳过第一个'\ B'。 – tangens 2009-10-13 08:16:48

+0

够公平的,我会改变它。 – Blindy 2009-10-13 08:32:41

0

尝试以下操作:

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

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

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

+0

非空间分隔符失败。 – Blindy 2009-10-13 08:10:36

+0

已更新,以处理逗号。 Q指定空格,逗号或eol。所以现在应该覆盖它。 – dave 2009-10-13 08:20:52

相关问题