-2

可能重复:
正则表达式匹配打开的标签,XHTML 自包含标签除外

我有一个任意 XML 字符串,它也有<b>, <i>具有通常含义的标签。我只需要在纯文本中执行字符串替换。不应替换节点定义中的任何内容。

例如,我想用 * 替换“hello”。XML之类的<hello a="hello">text sayh<b>ell</b>o more text</hello>应该成为<hello a="hello">text say* more text</hello>

做这个的最好方式是什么?我打算regex只使用,但这个问题被否决了。

4

1 回答 1

0

一个非常快速和肮脏(强调肮脏)的解决方案,它只是实现规则“仅当下一个尖括号不是闭合尖括号时才匹配”将是

hello(?![^<>]*>)

这可能适用于您的 XML 文件,但它可能会以各种方式在有效 XML 上失败(在无效 XML 上甚至更多)。

编辑:

自从我原来的答案以来,问题已经发生了很大的变化,所以答案不再正确。如果你想忽略粗体/斜体标签,你要么首先必须完全删除它们,搜索</?[bi]>并用空字符串替换所有这些,然后运行上面的正则表达式(但这将删除所有 这些标签,而不仅仅是里面的标签hello,或使用

</?[bi]>h</?[bi]>e</?[bi]>l</?[bi]>l</?[bi]>o</?[bi]>(?![^<>]*>)

而不是上面的正则表达式。到目前为止,我认为您可以看到正则表达式对于此类任务并不是一个可靠的工具。但这应该已经从评论中清楚了。

于 2013-01-27T08:12:15.473 回答