Regex对多个逗号分隔值的正向前瞻

时间:2018-03-14 22:10:28

标签: regex regex-lookarounds splunk

我想提出一个正则表达式来从DML查询语句中提取值,例如仅针对特定列的插入,更新等。

示例DML -

insert into abc_emp.employee (emp_name, emp_id, emp_dept)
values ('Scott Tiger', 2246, 'Accounts')

update abc_dept.department set dept_name = 'Sales', dept_head = 'Scott 
Tiger' where dept_id = 10

update abc_cust.dbo.customer set cust_name = 'Adam Jackson'
where cust_id = 1100

在上面的查询中,我的用例中感兴趣的列是 emp_name,emp_id来自员工表, 来自department表的dept_head和来自customer表的cust_name

我想出的正则表达式是 -

(?:insert into|update)(?:\s\w+[\.]((dbo\.)?)(employee|department|customer))
(?:\s([\(]|(set\s)))(?=.*?(emp_name|emp_id|dept_head|cust_name))

这给出了以下结果 - given regex result

虽然仍然不完整,但我期待这个正则表达式有4个匹配而不是3个匹配。它不匹配 emp_id 。我怀疑这是由于|第六个捕获组的操作员 -

(emp_name|emp_id|dept_head|cust_name)

在任何查询的第一次匹配时返回。我希望从捕获组中获得尽可能多的匹配(1个或更多),而不仅仅是一个。 有什么办法可以实现吗?

PS:我最后的要求是提取放入这些列的值并对它们进行替换以屏蔽数据。这个正则表达式将是Splunk sed脚本的一部分,其中将发生替换。

正则表达式的味道 - 我认为Splunk使用PCRE,所以Perl。

PPS:我对正则表达式来说很新鲜。

编辑1:决定按照@CAustin

的建议单独进行更新和插入查询

更新,我到目前为止 enter image description here

this is the regex

(?:更新\ S \ W +?(雇员|部门|客户)\ S +((SET \ S +))?)(= EMP_NAME?)|(?= EMP_ID)|(?= dept_head,然后)| (?= CUST_NAME)|(?= cust_phone)

0 个答案:

没有答案