所以我需要用<cfqueryparam value="#var#" />
和<cfqueryparam value="#var2#" />
替换#var#和#var2#。但是,只有当#var#包含在<cfquery></cfquery>
内时才会发生这种情况。
作为额外标准,cfquery-tag将包含散列符号之前和之后的文本。这是一个例子:
<cfquery datasource="#tablename#">
SELECT * FROM table WHERE name = #var#, somethingelse = #var2#;
</cfquery>
我需要一个只有匹配'test'的正则表达式,当它位于两个哈希符号之间和cfquery-tag内部时,可能有也可能没有属性。
我正在使用grepWin进行替换。
答案 0 :(得分:6)
使用正则表达式的另一种解决方案:
您可以使用以下内容进行匹配:
(#[^#><]*#)(?=[^>]*<\/cfquery>)
并替换为:
<cfqueryparam value="$1" />
请参阅DEMO
答案 1 :(得分:2)
<强>策略强>
你可以使用awk
这很简单。在伪代码中,我们将尝试以下内容:
look for occurrence of cfquery
substitute as desired
until /cfquery is found
<强>脚本强>
这导致以下脚本:
in_query {
$0 = gensub(/(#[^#]+#)/, "<cfqueryparam value=\"\\1\" />", "g", $0)
}
/<cfquery.*>/ {
in_query = 1
}
/<\/ *cfquery.*>/ {
in_query = ""
}
{
print $0
}
<强>用法强>
awk -f script.awk file