Вы можете использовать regexp_replace
, чтобы удалить все, что не соответствует вашему шаблону.
with t (col) as (
select 'My twwet #HashTag1 and this is the #SecondHashtag sample, #onemorehashtag'
from dual
)
select
regexp_replace(col, '(#\S+\s?)|.', '\1')
from t;
Производит;
#HashTag1 #SecondHashtag #onemorehashtag
regexp_substr
вернет одно совпадение. Что вы можете сделать, так это превратить вашу строку в таблицу, используя connect by
:
with t (col) as (
select 'My twwet #HashTag1 and this is the #SecondHashtag sample, #onemorehashtag'
from dual
)
select
regexp_substr(col, '#\S+', 1, level)
from t
connect by regexp_substr(col, '#\S+', 1, level) is not null;
Возвращает:
#HashTag1
#SecondHashtag
#onemorehashtag
РЕДАКТИРОВАТЬ:
\S соответствует любому непробельному символу. Было бы лучше использовать \w, который соответствует az, AZ, 0-9 и _.
Как прокомментировал @mathguy и с этого сайта : хэштег начинается с алфавита, затем допускаются буквенно-цифровые символы или символы подчеркивания.
Так что паттерн #[[:alpha:]]\w*
будет работать лучше.
with t (col) as (
select 'My twwet #HashTag1, this is the #SecondHashtag. #onemorehashtag'
from dual
)
select
regexp_substr(col, '#[[:alpha:]]\w*', 1, level)
from t
connect by regexp_substr(col, '#[[:alpha:]]\w*', 1, level) is not null;
Производит:
#HashTag1
#SecondHashtag
#onemorehashtag
person
Gurwinder Singh
schedule
18.03.2017