RegEx在两个哈希符号之间,两个标签之间替换文本,但保留其他所有内容

时间:2015-05-28 12:29:06

标签: regex replace coldfusion full-text-search

所以我需要用<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进行替换。

2 个答案:

答案 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