Граница совпадающего слова, похожая на улей

Я новичок в сопоставлении регулярных выражений Hive и изо всех сил пытаюсь найти правильный шаблон для сопоставления границ слов:

haystack RLIKE concat('(?i)\b', 'needle', '\b')

ничего не возвращает.

Примеры значений, которые у меня есть в БД:

haystack
---------
needless to say
this is a needle
so many (needle)
these are needles

Когда я использую haystack RLIKE concat('(?i)', 'needle'), он возвращает мне все строки, но на самом деле я ищу this is a needle.


person deGee    schedule 02.03.2021    source источник
comment
вы ищете логику вроде - сначала я должен прийти, а потом игла? Затем вы можете использовать логику ниже - where instr(col,'i') >0 AND instr(col,'needle') >0 AND instr(col,'i') < instr(col,'needle')   -  person Koushik Roy    schedule 02.03.2021


Ответы (1)


В Hive используйте две обратные косые черты: \\b

Демо:

with mytable as (
select stack(4,
'needless to say',
'this is a needle',
'so many (needle)',
'these are needles'
) as haystack
)

select haystack, haystack rlike concat('(?i)\\b', 'needle', '\\b') from mytable;

Результат:

haystack             _c1
needless to say      false
this is a needle     true
so many (needle)     true
these are needles    false

Обратите внимание, что so many (needle) также соответствует, потому что ( и ) не являются символами слова.

person leftjoin    schedule 02.03.2021