我必须解析许多文本文件,其中每个文本文件包含一个或多个XML文档。我知道每个XML都包含在一个Envelope标签中作为根标签,但它们具有不同的名称空间。 我试图创建一个正则表达式来从文本文件中获取这些XML文档,它确实适用于大多数文档,但对于某些人来说,我遇到了灾难性的回溯错误。我认为这是因为文本太大而且我的表达效率不高。我对正则表达式并不是很擅长,所以我很难解决这个问题。
我正在寻找的模式是:
<namespace:envelope attributes>XML</namespace:envelope>
到目前为止,我想出的是:
(?i)<[^:]*?:envelope[^>]*?>.*?<\/[^:]*?:envelope>
非常感谢任何帮助。
答案 0 :(得分:-1)
尝试使用此正则表达式:
#<([^/].*?):envelope\s.+?</\1:envelope>#s
或者更短的,如果您不需要单独使用命名空间:
#<([^/].*?:envelope)\s.+?</\1>#s