Проверка на регулярные выражения для символа в строке
Если я хочу проверить, что строка содержит @
символ я могу написать что-то вроде
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,'^@$')