我正在使用缓冲区传输xml文档。我将缓冲区设置得很低(50)以保持良好的性能。然后我使用缓冲的字符串尝试从xml中提取rootelement名称(在这种情况下,我需要在下面的xml中使用“abc”):
<?xml version="1.0"?>
<!--foobar-->
<!--<foo:bar></foo:bar>-->
<foo:abc xmlns:foo="url"><a><b>...
我应该只获取名称本身,而不使用别名。 此外,应忽略注释中的处理指令和xml标记。 当没有匹配时,我会让缓冲区变大并再次尝试匹配,直到我找到了元素。
我创建了一个完全正确的正则表达式,并返回了元素名称。使用$ 4的替换功能。 然而,当正则表达式不匹配任何东西时,它会挂起很长时间试图解决模式......
(?s)(.*?(<!--.*?-->)?.*?)*<(.*?:)?([^!\?].*?)((\s+|/).*)?>.*
问题似乎出现在试图匹配评论的部分
(.*?(<!--.*?-->)?.*?)*
但我无法弄清楚如何优化它,而不会破坏它...... 有什么想法吗?