(Натолкнула на размышления вот эта строка из chrome/content/filterClasses.js проекта Adblock Plus. В POSIX API regcomp()/regexec() всё также работает, как и в JavaScript.)
Почему срабатывает следующее выражение?
> echo "a.b" | grep -E '[ -#]' a.bВедь в ASCII и UTF-8 точка находится после диеза.
Поправить легко:
> echo "a.b" | LANG= grep -E '[ -#]'
Оказывается, это устойчивое поведение.
> touch 'a ' ; touch 'a!' ; touch 'a"' ; touch 'a#' ; touch 'a.' ; touch 'a,' > ls a a, a! a. a" a# > LANG= ls a a! a" a# a, a.
Братцы, как называется эта Collating sequence для этих знаков, отличная от ASCII/Unicode?
Update: http://www.collation-charts.org/ (Спасибо Яше!)
no subject
Date: 2010-10-25 02:09 pm (UTC)Re: Похоже, что collation tables зависят от текущей языковой уст
Date: 2010-10-25 08:16 pm (UTC)Но вот, что меня больше всего терзает в этой истории, Леонид, так это - что же это за загадочная такая система упорядочивания, откуда она вдруг возникает и под каким именем общеизвестна?
Ведь я без труда могу понять, что есть ASCII и почему в UTF-8 тот же порядок символов.
Но я никак не могу понять, к чему вдруг понадобилось при определении языка (будь то en_US или ru_RU; я проверял на своей ru_RU.UTF-8 и у друга с en_US.UTF-8) вдруг менять порядок следования пробела, точки, запятой, восклицательного знака и диеза!
Какой в этом может быть смысл?
Причём, беру python и получаю:
Python 2.6.5 (release26-maint, Aug 22 2010, 13:19:45) [GCC 4.4.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> re.compile("[ -#]").search('a.b') >>> re.compile("[ -#]").search('a"b') <_sre.SRE_Match object at 0x7fbeadca6648> >>>Та же фигня в Python 3.1. Т.е., как и в JavaScript с POSIX Regex. К сожалению, не знаю perl - как там не могу проверить.Re: Похоже, что collation tables зависят от текущей языковой уст
Date: 2010-10-25 08:20 pm (UTC)Re: Похоже, что collation tables зависят от текущей языковой уст
Date: 2010-10-25 08:24 pm (UTC)no subject
Date: 2010-11-02 11:43 am (UTC)no subject
Date: 2015-10-04 06:44 pm (UTC)Re: Ничего не понял, да и фиг с ним.
Date: 2015-10-04 10:41 pm (UTC)Скажем, у тебя есть файлики с именами (заключены в одинарные ковычки): 'a ', 'a!', 'a"', 'a#', 'a.' и 'a,'.
Т.е., ты видишь, это - латынь!!! Там нет ничего такого "кириллического ада (кои-8/дос/выньдос/исо/...)" или "аллах-ахабр", не знаю... Чистая ASCII с кодами < 128! Понял, да? Даже фидо пропустит.
И тут ты говоришь: я хочу без языка вообще сравнивать, а потом - с учётом некоторого языка.
Ну, ЯтЪ, почему результаты в результате - разнятся, Махатма?