соответствующие шаблоны для regexp_like в Oracle для условного включения группы символов - PullRequest
0 голосов
/ 21 мая 2019

Я попытался найти хорошую документацию для сопоставления с шаблоном для использования regexp_like в Oracle.Я нашел некоторые и следовал их инструкциям, но похоже, что я что-то пропустил или инструкция не является исчерпывающей.Давайте посмотрим на этот пример:

SELECT * FROM
(
 SELECT 'ABC' T FROM DUAL
 UNION
 SELECT 'WZY' T FROM DUAL
 UNION
 SELECT 'WZY_' T FROM DUAL
 UNION
 SELECT 'WZYEFG' T FROM DUAL
 UNION
 SELECT 'WZY_EFG' T FROM DUAL
 ) C
 WHERE regexp_like(T, '(^WZY)+[_]{0,1}+[A-Z]{0,6}')

Я ожидаю получить WZY и WZY_EFG.Но то, что я получил, было:

enter image description here

То, что я хотел бы получить, это то, что "_" может присутствовать или нет, но если после символа естьПервая группа, обязательно, чтобы она присутствовала только один раз.

Есть ли чистый способ сделать это?

1 Ответ

1 голос
/ 21 мая 2019

Используйте группировку подвыражений, чтобы символ _ отображался только с заглавными буквами алфавита

Да, ваш шаблон не соответствует необходимой вам условной логике (см. Только _ когда следуют заглавные буквы алфавита).

Помещение символа _ в список заглавных букв алфавита в группу подвыражений приводит к возникновению этой логики.

Наконец, добавление привязки конца строкиобращается к сценариям нулевого соответствия.

SCOTT@DB>SELECT                                         
  2      *                                                  
  3  FROM                                                   
  4      (                                                  
  5          SELECT 'ABC' t FROM dual                       
  6          UNION ALL                                      
  7          SELECT 'WZY' t FROM dual                       
  8          UNION ALL                                      
  9          SELECT 'WZY_' t FROM dual                      
 10          UNION ALL                                      
 11          SELECT 'WZYEFG' t FROM dual                    
 12          UNION ALL                                      
 13          SELECT 'WZY_EFG' t FROM dual                   
 14      ) c                                                
 15  WHERE                                                  
 16      REGEXP_LIKE ( t, '^(WZY)+([_][A-Z]{1,6}){0,1}$' );  
         T                                                  
__________                                                  
WZY                                                         
WZY_EFG                                                     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...