regex 在Visual Studio代码中使用正则表达式替换数据

js5cn81o  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(119)

我一直试图在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+(?:(?!>).)*?>!?)*(?<=[\(])(.*?)(?=\))
fykwrbwg

fykwrbwg1#

假设#id_inm#'#arc_doc#只出现在Select行中,如您的示例所示,尝试这样做,请参见Regex101 demo
查找:(#id_inm#)|'(#arc_doc#)'
替换:<cfqueryparam value = "$1$2" CFSQLType = "CF_SQL_INTEGER">

相关问题