我想匹配两个字符串之间的文本,尽管最后一个字符串/字符可能不可用。
字符串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/