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

RegEx to replace text between two hash-symbols, between two tags, but keep everything else

所以我需要用 <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 标签内时。

我正在使用 grepWin 进行替换。

策略

您可以使用 awk 这很简单。在伪代码中,我们将尝试以下操作:

look for occurrence of cfquery
substitute as desired
until /cfquery is found

脚本

这导致以下脚本:

in_query {
    [=11=] = gensub(/(#[^#]+#)/, "<cfqueryparam value=\"\1\" />", "g", [=11=])
}
/<cfquery.*>/ {
    in_query = 1
}
/<\/ *cfquery.*>/ {
    in_query = ""
}
{
    print [=11=]
}

用法

awk -f script.awk file

另一个正则表达式的解决方案:

您可以使用以下方式进行匹配:

(#[^#><]*#)(?=[^>]*<\/cfquery>)

并替换为:

<cfqueryparam value="" />

DEMO