Специальный символ Oracle REGEXP - PullRequest
0 голосов
/ 04 декабря 2018

Мне нужно разрешить только набор символов, то есть, от a до z, от A до Z, от 0 до 9.! @ # $% * () _ = + | [] {} "'';:? /.,-

, но когда я добавляю символ тире (-) в запрос ниже, он не работает, пожалуйста, помогитея в ближайшее время.

  SELECT :p_string FROM dual
   WHERE NOT REGEXP_LIKE (translate(:p_string,chr(10)||chr(11)||chr(13), ' '),'[^]^A-Z^a-z^0-9^[^.^{^}^!^@^#^$^%^*^(^)^_^=^+^|^\^{^}^"^''^;^:^?^/^,^-^ ]' ); 

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Дополнительные ^ символы внутри выражения в скобках в вашем шаблоне не являются, как я думаю, вы ожидаете, отрицанием;это делает только первая ^ в скобках.

Основная проблема, которая вызывает, помимо того, что допускается сопоставление фактического символа кругового отражения, когда вы, кажется, не хотите его, заключается в том, что вы в конечном итогес ^-^ рассматривается как диапазон.

Чтобы включить литерал -, он должен быть первым или последним в скобках; из документов :

Чтобы указать правую скобку (]) в выражении в скобках, поместите его первым в списке (после начального огибающего (^), если есть).

Чтобы указать дефис в выражении в скобках, поместите его первым в списке (после начального окружности (^), если есть), последним в списке или в качестве конечной точки диапазона в выражении диапазона..

Итак, когда вам нужно сделать оба, сделайте дефис последним;Вы можете изменить свой шаблон на:

'[^]A-Za-z0-9[.{}!@#$%*()_=+|\{}"'';:?/, -]'

Вы также можете пропустить шаг tralsnate, включив в шаблон специальные символы:

'[^]A-Za-z0-9[.{}!@#$%*()_=+|\{}"'';:?/, '||chr(10)||chr(11)||chr(13)||'-]'
0 голосов
/ 04 декабря 2018

Похоже, вам нужно разрешить только (7-битные) символы ASCII, за исключением ~ и ^

В этом случае я бы попробовал это так:

WHERE CONVERT(p_string, 'US7ASCII') = p_string
   AND NOT REGEXP_LIKE(p_string, '~|\^')

Вместо CONVERT(p_string, 'US7ASCII') = p_string вы также можете использовать ASCIISTR(REPLACE(p_string, '\', '/')) = REPLACE(p_string, '\', '/')

0 голосов
/ 04 декабря 2018

[.-.] Отлично подойдет для этого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...