查找字符串中最后一个未关闭的 XML 标记

Posted

技术标签:

【中文标题】查找字符串中最后一个未关闭的 XML 标记【英文标题】:Finding the last unclosed XML tag in a string 【发布时间】:2018-03-05 12:31:21 【问题描述】:

我正在尝试在 C# 中创建一个函数,该函数将尝试在用户键入 </ 时自动生成关闭 XML 标记。 假设我有以下字符串:

<books>
  <book>
  <author>Tolkien</author>
  <title>Fellowship of the Ring</title>
  </book>
  <book>

当用户键入&lt;/时,应直接附加字符串book&gt;

我有点迷失如何找到最后一个未关闭的标签(在这种情况下 &lt;book&gt; 以编程方式。正则表达式是最好的方法吗?使用 XML 解析器似乎是不可能的,因为 XML 在这点无效。

【问题讨论】:

RegEx match open tags except Xhtml self-contained tags的可能重复 h̸̡̪̯ͨ͊̽̅̾ȩ̸̡̬̩̪̯̾͛ͪ̈ͨ͊̽̅̾͘ȩ̬̩̾͛ͪ̈͘c̷̙̝͖ͭ̏ͥͮ͟oͮ͏̮̪̝͍m̖͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞ͩ͌͝s̨̥̫͎̭ͯ̿̔ span> 【参考方案1】:

考虑使用堆栈,对于每个开始标签,您都推送标签,然后每当遇到“”时,您都会从堆栈中弹出标签

<books>
  <book>
  <author>Tolkien</author>
  <title>Fellowship of the Ring</title>
  </book>
  <book>

推书、推书、推作者、流行作者、推书名、流行书名、流行书等

在此结束时,堆栈上的任何内容都没有正确关闭

【讨论】:

当然,如果您允许编辑或删除已经输入的文本(谁不允许?),那么它会变得相当复杂。

以上是关于查找字符串中最后一个未关闭的 XML 标记的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ Idea标记红色web.xml运行良好[关闭]

XML字符串到XML文档

REGEXP_LIKE 匹配与特定字符串不同的 xml 标记内容

将 XML 自关闭标签转换为打开和关闭标签

用jquery在字符串中查找最后一个单词的第一个字母(字符串可以有多个单词)

在linux中查找字符串并替换另一行[关闭]