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

#regex #hive #hiveql #word-boundary #rlike

#регулярное выражение #улей #hiveql #граница слова #rlike

Вопрос:

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

 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 .

Комментарии:

1. вы ищете логику, подобную — я должен прийти первым, а затем иглой? Затем вы можете использовать приведенную ниже логику — where instr(col,'i') >0 AND instr(col,'needle') >0 AND instr(col,'i') < instr(col,'needle')

Ответ №1:

В улье используйте две обратные косые черты: \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) это также сопоставляется, потому ( что и ) не являются символами слова.