regex - hive 正则表达式 : Positive lookahead to match '&' or end of string

标签 regex hive

我想匹配两个字符串之间的文本,尽管最后一个字符串/字符可能不可用。

字符串1:'www.mywebsite.com/search/keyword=toys'

字符串2:'www.mywebsite.com/search/keyword=toys&lnk=hp1'

这里我想匹配keyword=中的值,即“玩具”并且我正在使用

(?<=关键字=)(.*)(?=&|$)

适用于 String1,但对于 String2,它匹配“&”之后的所有内容

我做错了什么?

最佳答案

.* 是贪婪的。它会采取一切可能的方式,因此在字符串末尾 ($) 处停止,而不是在 & 字符处。
将其更改为非贪婪版本 - .*?

with t as
(
    select  explode
            (
                array
                (
                    'www.mywebsite.com/search/keyword=toys'
                   ,'www.mywebsite.com/search/keyword=toys&lnk=hp1'
                )
            ) as (val)
)
select  regexp_extract(val,'(?<=keyword=)(.*?)(?=&|$)',0)
from    t
;

+------+
| toys |
+------+
| toys |
+------+

关于regex - hive 正则表达式 : Positive lookahead to match '&' or end of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648384/

相关文章:

r - sparklyr 我可以将格式和路径选项传递给 spark_write_table 吗?还是将 saveAsTable 与 spark_write_orc 一起使用?

hadoop - HIVE 插入到动态分区表永远运行/挂起

hadoop - 如何创建 hive 仓库目录?

regex - Perl 正则表达式 : meaning of "??"

java - 正则表达式中的电子邮件之间允许有空格

java - 模式匹配 - 字符串搜索

hadoop - 为什么我们需要将外部表移动到托管配置单元表?

java - 从字符串中获取子字符串 Java(Android)

java - 正则表达式将以下行拆分为各个字段?

hadoop - 使用 __HIVE_DEFAULT_PARTITION__ 值创建分区