此任务的 Perl 正则表达式搜索字符串可以是例如:
(?s)^[\t ]*<XmlElement2(?:.(?!</XmlElement2>))+?SearchTerm.+?</XmlElement2>[\t ]*(?:\r?\n|\r)
解释:
(?s) ... 标志以在搜索表达式中也通过点匹配换行符。
^[\t ]* ... 从行首开始搜索并匹配 0 个或多个制表符或空格。
<XmlElement2 ... 要删除的元素的开始标记包含SearchTerm。
(?:.(?!</XmlElement2>))+? ...一个非标记组,只要当前字符后面的字符串不是</XmlElement2>,就可以一次或多次非贪婪地查找任何字符。负前瞻(?!</XmlElement2>) 阻止选择以<XmlElement2 开头的块并匹配任何内容,包括一个或多个</XmlElement2> 和<XmlElement2 标记,直到在文件中的任何位置找到SearchTerm。
SearchTerm ... 必须在元素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。