regexp_extract 配置单元未按预期工作

regexp_extract hive not working as expected

我开始使用 hive 做一些数据准备,运行 在使用 regexp_extract udf 时遇到了一个特殊问题。我正在研究 XML 结构,我正在尝试从 XML 字符串中提取一些元素。 这是一个例子。我正在操作的字符串是:

<b>ajsdnf</b>
<a>asdhf</a>
<a>alfnv</a>
<b>ajsdnf</b>
<a>test</a>

正则表达式(<a>.*?<\/a>) 应提取仅包含带有 a 标签的元素的所有字符串。当我在 regex101 上检查我的逻辑时,它找到了所有正确的组。

然而当我运行它像这样对抗蜂巢时

select regexp_extract('<b>ajsdnf</b><a>asdhf</a><a>alfnv</a><b>ajsdnf</b><a>test</a>','(<a>.*?<\/a>)',0) from some_table limit 1;

只有 return 第一个 <a>asdhf</a>。根据 regex_extract 的文档,如果我将整数 0 作为第三个参数传递,它应该 return 所有出现。有没有机会我可以达到以下结果

<a>asdhf</a>
<a>alfnv</a>
<a>test</a>

如果你想知道为什么我不使用 xpath 来处理这个 XML 问题,我有一个更复杂的结构,想要提取 XML 树的某些部分,包括他们所有的子节点。这是 hive 的 xpath udfs 目前无法处理的事情。

select regexp_replace('<b>ajsdnf</b><a>a<b>aksdhf</b>dhf</a><a>alfnv</a><b>ajsdnf</b><a>test</a>','(.*?)(<a>.*?<\/a>)(.*?)','') from some_tablelimit 1;

这成功了。感谢 nhahtdh 的建议