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
所以我需要用 <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