我一直试图在Visual Studio Code中使用正则表达式替换字符串,因为有几个查询和文件,我有以下代码我想做的事情:
<cfquery datasource='#cdc#' username='#user#' password='#password#' name='RS_List_Lib'>
SELECT fun_ctl_save_type(#id_inm#,'#arc_doc#');
</cfquery>
<cfquery datasource='#cdc#' username='#user#' password='#password#' name='RS_List_Lib'>
SELECT * FROM fun_ctl_proyect_int_show(#id_inm#);
</cfquery>
我想做的是将它使用的“#parameter#”替换为:
<cfqueryparam value = "#parameter#" CFSQLType = "CF_SQL_INTEGER">
但是,我不想修改“”标签中的内容,而只想修改查询中的内容,这样它就给了我这样的结果:
<cfquery datasource='#cdc#' username='#user#' password='#password#' name='RS_List_Lib'>
SELECT fun_ctl_save_type(<cfqueryparam value = "#id_inm#" CFSQLType = "CF_SQL_INTEGER">, <cfqueryparam value = "#arc_doc#" CFSQLType = "CF_SQL_INTEGER">);
</cfquery>
<cfquery datasource='#cdc#' username='#user#' password='#password#' name='RS_List_Lib'>
SELECT * FROM fun_ctl_proyect_int_show(<cfqueryparam value = "#id_inm#" CFSQLType = "CF_SQL_INTEGER">);
</cfquery>
我尝试使用这个正则表达式,但它对我不起作用:
(<cfquery\s+(?:(?!>).)*?>!?)*(SELECT\s(.*)+((\s*#\w+#\s*(?:,\s*#\w+#\s*)*).)?)
因为所有的“SELECT...“和另一个它采取所有的值是在“#parameter#”并把它们放在一起,而不是被停止:
(<cfquerys+(?:(?!>).) *?>!?) *(?<=[(])(.*?) (?=))
最后我还是有这个正则表达式:(s*#w+#s*(?:,s*#w+#s*)*)
来标识我所有那些使用“#parameter#”但是替换那些在“”标签里面的人,如果不保持不变的话就不用修改<cfquery>
,只修改那些有查询的人。
我希望你能帮助我。
我已经试过这些表达,但我不知道我还能修改什么,因为我不太擅长使用它们。
规则1:
(\s*#\w+#\s*(?:,\s*#\w+#\s*)*)
规则2:
(<cfquery\s+(?:(?!>).)*?>!?)*(?<=[\(])(.*?)(?=\))
1条答案
按热度按时间fykwrbwg1#
假设
#id_inm#
和'#arc_doc#
只出现在Select
行中,如您的示例所示,尝试这样做,请参见Regex101 demo。查找:
(#id_inm#)|'(#arc_doc#)'
替换:
<cfqueryparam value = "$1$2" CFSQLType = "CF_SQL_INTEGER">