Regex 如何检查一系列值中的特定值是否已添加到XML属性?
考虑Regex 如何检查一系列值中的特定值是否已添加到XML属性?,regex,tcl,regex-negation,regex-lookarounds,Regex,Tcl,Regex Negation,Regex Lookarounds,考虑 set data {<prop>red;blue;green</prop>} 如果值为“粉色”,我将以 <prop>red;blue;green;pink</prop> 红色;蓝色绿色粉红色 如果我再运行一次,我会 <prop>red;blue;green;pink;pink</prop> 红色;蓝色绿色粉红色粉红色 是否可以重写正则表达式以检查$value并仅在缺少$value时添加它?而且,它应该能够处理
set data {<prop>red;blue;green</prop>}
如果值为“粉色”,我将以
<prop>red;blue;green;pink</prop>
红色;蓝色绿色粉红色
如果我再运行一次,我会
<prop>red;blue;green;pink;pink</prop>
红色;蓝色绿色粉红色粉红色
是否可以重写正则表达式以检查$value并仅在缺少$value时添加它?而且,它应该能够处理
<prop>red;blue;pink;green</prop>
红色;蓝色粉红色绿色
我试过((?!$value)),但没有真正起作用。非常感谢您的帮助。proc addToContent{data color}{
proc addToContent {data color} {
lassign [split $data <>] -> tag content endtag
if {$color ni [split $content \;]} {
return "<$tag>$content;$color<$endtag>"
} else {
return $data
}
}
addToContent {<prop>red;blue;green</prop>} pink
# -> <prop>red;blue;green;pink</prop>
addToContent {<prop>red;blue;pink;green</prop>} pink
# -> <prop>red;blue;pink;green</prop>
lassign[split$data]->标记内容endtag
如果{$color ni[split$content\;]}{
返回“$content;$color”
}否则{
返回$data
}
}
添加内容{红色;蓝色;绿色}粉红色
#->红色;蓝色绿色粉红色
添加内容{红色;蓝色;粉红色;绿色}粉红色
#->红色;蓝色粉红色绿色
如果您的Tcl版本没有lassign
,请使用foreach{->tag content endtag}[split$data]break
。如果没有ni
运算符,请使用[lsearch-exact[split$content\;]$color]<0
。在这两种情况下,您都应该升级
但是对于真正的XML处理,您应该使用类似于tDOM
的东西
文件:
<prop>red;blue;pink;green</prop>
proc addToContent {data color} {
lassign [split $data <>] -> tag content endtag
if {$color ni [split $content \;]} {
return "<$tag>$content;$color<$endtag>"
} else {
return $data
}
}
addToContent {<prop>red;blue;green</prop>} pink
# -> <prop>red;blue;green;pink</prop>
addToContent {<prop>red;blue;pink;green</prop>} pink
# -> <prop>red;blue;pink;green</prop>