2017-03-07 3 views
2

Ich möchte Text zwischen zwei Zeichenketten abgleichen, obwohl die letzte Zeichenkette/Zeichenkette möglicherweise nicht verfügbar ist.Hive regex: Positiver Lookahead für '&' oder Ende der Zeichenkette

String1: 'www.mywebsite.com/search/keyword=toys'

String2: 'www.mywebsite.com/search/keyword=toys & lnk = HP1'

Hier möchte ich entspricht den Wert in keyword = das ist 'Spielzeug' und ich bin mit

(< = keyword =?) (= &? | $) (*).

Werke für String1 aber für String2 sie paßt alles nach '& '

Was mache ich falsch?

Antwort

1

.* ist gierig. Es nimmt alles, was es kann, daher stoppt am Ende der Zeichenfolge ($) und nicht am & Zeichen.
ändern sie ihre nicht-gierige Version - .*?

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 | 
+------+ 
+0

perfekt Dank! – user7088181

Verwandte Themen