可能重复:
RegEx match open tags except XHTML self-contained tags
我有一个任意的XML字符串,它也有<b>, <i>
标签,具有通常的含义。
我只需要在纯文本中执行字符串替换。节点定义中的任何内容都不应被替换。
例如,我想用*替换“hello”。
像<hello a="hello">text sayh<b>ell</b>o more text</hello>
这样的XML应该成为<hello a="hello">text say* more text</hello>
最好的方法是什么?
我只会使用regex
,但这个问题被否决了。
答案 0 :(得分:0)
一个非常快速和肮脏(强调脏)的解决方案,简单地实现规则“仅当下一个尖括号不是一个闭合角括号时才匹配”将是
hello(?![^<>]*>)
这可能适用于您的XML文件,但它可能会以各种方式在有效的XML上失败(甚至在无效的XML上也会失败)。
修改强>
由于我原来的回答,问题已经发生了很大变化,所以答案不再正确。如果你想忽略粗体/斜体标签,你首先必须完全删除它们,搜索</?[bi]>
并用空字符串替换所有标签,然后运行上面的正则表达式(但这将删除 all < / em>这些标记,不仅仅是hello
中的标记,还是使用
</?[bi]>h</?[bi]>e</?[bi]>l</?[bi]>l</?[bi]>o</?[bi]>(?![^<>]*>)
而不是上面的正则表达式。到目前为止,我认为你可以看到正则表达式不是这类任务的可靠工具。但是,评论中应该已经清楚了。