Проверка на регулярные выражения для символа в строке

Если я хочу проверить, что строка содержит @символ я могу написать что-то вроде

REGEXP_LIKE(source_column,'@')

или же

REGEXP_LIKE(source_column, '.*@.*')

В чем разница между этими двумя формами? И почему REGEXP_LIKE(source_column,'@') возвращает true, даже если строка содержит другие символы, кроме @? Например, это соответствует mail@mail.com а также 12@

естественно '@' выглядит как точное совпадение строк для меня, и '.*@.*' Я читаю как "любая строка с этим символом".

1 ответ

Решение

Все эти три функционируют одинаково и возвращают true, если любое число символов предшествует или следует за @ условное обозначение:

REGEXP_LIKE(source_column,'@')
REGEXP_LIKE(source_column,'.*@.*')
REGEXP_LIKE(source_column,'^.*@.*$', 'n')

(Вам нужно 'n' параметр соответствия для последнего примера, если у вас есть многострочные данные, в противном случае . подстановочный знак не будет соответствовать символу новой строки и совпадение не будет выполнено.)

Если вы хотите точное совпадение, ищите начало строки (^) и конец строки ($) непосредственно перед и после символа:

REGEXP_LIKE(source_column,'^@$')
Другие вопросы по тегам