2015-01-31 2 views
22

Вау, это фактически соответствует é. Что здесь случилось? Я бы хотел, чтобы это не соответствовало ни чем иным, как типичным строчным буквам.Как [a-z] соответствует é?

$ echo "frappé"|egrep -E "^[a-z]+$" 
frappé 

задать расширенное (GNU Grep) 2,16 на Ubuntu 14.04

+0

Я просто попытался это на мой макинтош, и выражение ничего не совпадает, так, как надо , На какой системе вы работаете? – dasblinkenlight

+0

Не подходит для меня: https://www.regex101.com/r/zD2lX8/1 –

+0

https://www.regex101.com/r/zD2lX8/2 –

ответ

31

Ваша установка locale говорит egrep/grep -E как сверяют диапазон [a-z] символов.

$ export LC_COLLATE=C 
$ echo "frappé" | egrep '^[a-z]+$' 
# no match 

$ export LC_COLLATE=en_US.utf8 
$ echo "frappé" | egrep '^[a-z]+$' 
frappé 

Именованные символьные классы могут использоваться для сопоставления символов с диакритическими знаками, несмотря на локали:

$ export LC_COLLATE=C 
$ echo "frappé" | egrep '^[[:lower:]]+$' 
frappé 
+0

Единственная причина, по которой основной режим не соответствует, заключается в том, что в базовом режиме '+' соответствует только литералу '+'. 'echo" frappé "| grep '^ [a-z] * $' 'соответствует. (Я не знаю о '-P', это отключено в моем grep.) – hvd

+0

Хороший вопрос о -G,' echo "é" | LC_COLLATE = en_US.utf8 grep -G '^ [a-z] $' 'соответствует. –

Смежные вопросы