Регулярное выражение для получения второго слова

#regex #oracle

#регулярное выражение #Oracle

Вопрос:

В

 SELECT '5-CULVERTS AND UNDERPASSES' FROM DUAL;
 

попытка получить 5-CULVERTS AND с помощью строки запроса до второго слова

попытка этого

 select regexp_substr('5-CULVERTS AND UNDERPASSES','[^ ]{2} ') from dual
 

но никакой помощи..

Ответ №1:

Чтобы сопоставить два первых слова, вы можете сделать это:

 SELECT REGEXP_SUBSTR(mycolumn, 'S s S ', 1, 1, 'cm') FROM dual;
 

Объяснение

  • S соответствует любым символам, которые не являются пробелами (первое слово)
  • s соответствует любым символам пробела
  • S соответствует второму слову

Вариант 2: второе слово является необязательным

Используйте это:

 SELECT REGEXP_SUBSTR('6-BRIDGES', 'S (s S )?', 1, 1) FROM dual;
 

Пробелы и второе слово теперь заключены в круглые скобки и сделаны необязательными с помощью ?

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

1. Ах да. Я забыл о S вместо [^s] . Но я не буду менять свой ответ, потому что вы сделали S . 1 вам

2. @sshashank124 Спасибо, почти идентичные ответы, я позабочусь о вас в следующий раз. 🙂

3. Спасибо, Низар, рад, что это помогло! 🙂

4. SELECT REGEXP_SUBSTR('6-BRIDGES', 'S s S ', 1, 1) FROM dual; это возвращает null

5. Да, вы сказали, что хотите два слова. Если вам нужно 1 ИЛИ два слова, используйте это: SELECT REGEXP_SUBSTR('6-BRIDGES', 'S (s S )?', 1, 1) FROM dual; обновит ответ. 🙂

Ответ №2:

Вы можете сделать это следующим образом:

 [^s] s[^s] 
 

ДЕМОНСТРАЦИЯ

 select regexp_substr('5-CULVERTS AND UNDERPASSES','[^s] s[^s] ') from dual
 

Ответ №3:

вы можете сделать это таким образом

SQL> выберите regexp_substr(‘5-ВОДОПРОПУСКНЫЕ ТРУБЫ И ПОДЗЕМНЫЕ ПЕРЕХОДЫ’,’S (s S )?‘,1,1) из dual;

Out положить

5-ВОДОПРОПУСКНЫЕ ТРУБЫ И