@duggerr

Регулярные выражения: почему не работает?

Хочу вытянуть строки из базы только где нет кириллических букв в строке. Прочитал статью на хабре про рег.выр. - много вопросов снял, но не пойму, почему :

select 'ok' from dual where regexp_like('123asdasd4ц5','[^а-я]')

возвращает строку, хотя там стоит ц

а вариант:
select 'ok' from dual where not regexp_like('123asdasd4ц5','[а-я]')

работает как надо: не возвращает строки

Ну и чтобы два раза не открывать вопрос, в статье не было раскрыто, есть ли разница между [a-z] и [[a-z]]

Спасибо
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
регулярка, которая проверяет, что строка состоит из любых символов, кроме килиллицы

^[^а-яёА-ЯЁ]*$
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@duggerr Автор вопроса
Мне интересно обьяснение.
1. добавлены буквы ёЁ, т.к. они не в диапазоне а-яА-Я
2. добавлены символы начала и конца строки
3. добавлен символ * что строка состоит из еще чего угодно (хотя если его убрать, то тоже сработает, как показывает regex101 . com, а вот оракл не работает, ему прям нужна звездочка)

Но почему мой перый вариант не сработал? что именно в моей регулярке не так?
И почему второй мой вариант работает, без указания начала и конца строки?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы