Есть несколько возможных причин, почему регулярное выражение может не работать как ожидается:
1. Ошибки в самом выражении: неправильно написаны символы, неправильно задан диапазон или набор символов и т. д. Например, в вашем примере `[^а-я]` может быть ошибка в написании или неправильном указании диапазона кириллических символов.
2. Некорректное применение регулярного выражения к конкретным данным: возможно, что в строке, которая содержит букву "ц", есть другие факторы или символы, которые влияют на работу регулярного выражения.
3. Неправильная интерпретация регулярного выражения программой или языком программирования: различные языки и программы могут по-разному интерпретировать и обрабатывать регулярные выражения.
Чтобы выбрать только те строки, в которых отсутствуют кириллические буквы, можно использовать следующий запрос к базе данных:
```
SELECT *
FROM table_name
WHERE column_name not regexp '[а-яА-Я]'
```
Этот запрос будет выбирать только те строки, где значение в столбце `column_name` не содержит кириллические буквы.
Разница между `[a-z]` и `[[a-z]]` в регулярных выражениях заключается в том, что `[a-z]` будет соответствовать любой строчной букве от a до z, в то время как `[[a-z]]` будет соответствовать любому символу, который является `[`, `a`, `-`, `z` или `]`. То есть `[[a-z]]` является эквивалентом `[a-z]`, так как символы в квадратных скобках уже интерпретируются как символы символьного класса.
Если вам нужно найти конкретный символ из указанного набора, вы можете использовать `[[ ]]'`.