此任务的Perl正则表达式搜索字符串可以是例如:
(?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)
解释:
(?s)
... 标志以在搜索表达式中也通过点匹配换行符。
^[\t ]*
...从行首开始搜索并匹配 0 个或多个制表符或空格。
<XmlElement2
...要在包含时删除的元素的开始标记SearchTerm
。
(?:.(?!</XmlElement2>))+?
...一个非标记组,只要当前字符之后的字符串不是,就可以一次或多次非贪婪地查找任何字符</XmlElement2>
。负前瞻(?!</XmlElement2>)
阻止选择以任何内容开头<XmlElement2
并匹配任何内容的块,包括一个甚至多个标签,直到</XmlElement2>
在文件中的任何位置找到。<XmlElement2
SearchTerm
SearchTerm
... 必须在 element 中找到的字符串XmlElement2
。
.+?
...任何字符(包括换行符)一次或多次非贪婪。非贪婪意味着在文件中的下一次出现</XmlElement2>
而不是最后一次出现时停止匹配字符</XmlElement2>
。
</XmlElement2>
... 要删除的 XML 元素的结束标记包含SearchTerm
.
[\t ]*(?:\r?\n|\r)
... 0 个或多个制表符或空格以及 DOS/Windows(回车 + 换行)或 UNIX(仅换行)或 MAC(仅回车)行结尾。
PS:Perl 正则表达式替换在 Windows XP 上使用 UltraEdit for Windows v22.20.0.49 和在 Windows 7 上使用 v25.20.0.88 进行了测试,因为我没有 Mac。