Escape-последовательность не работает для ']' в oracle plsql - PullRequest
1 голос
/ 20 сентября 2019
SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE ('[', '^([[ABC[]*)$');
-- This will return the expected result VALID.

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']', '^([[ABC\]]*)$');
-- This is not returning the expected result.

Помогите, пожалуйста, посоветовать, как использовать escape-последовательность для квадратной скобки ']'

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

В соответствии с документацией , поместите "]" первым в списке.

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']', '^([]ABC]*)$');

1 голос
/ 20 сентября 2019

Для [

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE ('[[[[', '^\[+$');

Для]

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']]]]', '^\]+$');

Для] [

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']]]]', '^(\]|\[)+$');

С символами ABC:

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']]hfbgie]]', '^[a-zA-Z]|(]|[)]+$')
1 голос
/ 20 сентября 2019

Во втором запросе вы соответствуете от [ до ].Конечно, это не сработает.Исправьте это:

SELECT 'VALID' FROM DUAL WHERE REGEXP_LIKE (']', '^([]]*)$');

ОБНОВЛЕНИЕ : Если вы просто хотите проверить, что определенные символы не находятся в строке, вам нужно вместо этого REGEXP_INSTR.Если эта функция возвращает число> 0, это означает, что символ находится в строке.Вы можете попробовать это:

SELECT REGEXP_INSTR ('[ABC]', '\[|\]|[!%^&*{}]') FROM DUAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...