查找字符串中最后一个未关闭的 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>
当用户键入</
时,应直接附加字符串book>
。
我有点迷失如何找到最后一个未关闭的标签(在这种情况下 <book>
以编程方式。正则表达式是最好的方法吗?使用 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运行良好[关闭]
REGEXP_LIKE 匹配与特定字符串不同的 xml 标记内容