Oracle, regexp: первые два слова из строки

0000

Слова разделяются только пробелом, т.е. слова через запятую, тире и прочее - одно слово.
Пока пришел к такому:

select regexp_substr('ааа-ббб ввв ггг дд 4444 ееее', '[^[:space:]]+ \w+',1) word from dual

Как вторую часть переписать, чтобы не буквы не считало началом нового слова?

Dasar

Слова разделяются только пробелом
если из этого можно сделать вывод, что слово - это всё что не пробел, то:

[^[:space:]]+ [^[:space:]]+

0000

Ага, спасибо, то, что нужно.

0000

А может кто подскажет как получить N-е слово?
INSTR/SUBSTR что-то не очень хочется использовать ибо крокодилы получаются :(

Dasar

А может кто подскажет как получить N-е слово?
оформить в виде функции не выход?

0000

Хранимку писать не хочется, поскольку они не используются (ETL).
Если регэкспом нельзя, то придется писать обертку, да.

0000

Кажется нагуглилось

regexp_substr('<предложение с разделителем слов ~>, '[^~]+', <word_no>, <word_no> + 1)

mbolik1

Только
regexp_substr('<предложение с разделителем слов ~>', '[^~]+', 1, <word_no>)

Пример:
select regexp_substr('Шла Маша по шоссе и сосала сушку','[^ ]+',1,4) from dual;


RES
шоссе

0000

Да, действительно, посмотрел, что значит третий параметр - позиция, с которой начинать поиск, т.е. 1 (с начала слова).
Спасибо.

kill-still

Недавно кстати тоже ковырялся с регэкспами, нашёл интересную шпаргалку: http://www.regexbuddy.com/
Оставить комментарий
Имя или ник:
Комментарий: