|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Kirill Frolov 2:5030/1123.8 09 Jun 2004 02:51:42 To : Serg Ivanov Subject : Re: RE -------------------------------------------------------------------------------- On Mon, 07 Jun 04 06:49:47 +0400, Serg Ivanov wrote: SI>>> Так из каких же символов состоит этот класс? KF>> Я так думаю, при 8-битном LC_CTYPE -- пустое множество. Иначе -- все KF>> символы с кодом больше 0xff и меньше нуля. SI> Пустой символ был неудачной фразой, надо было сказать "отсутствие SI> символа". Hет, я сказал именно "пустое множество", раз речь идёт о множестве, а не об конкретном единичном символе. Так вот множество может быть пустое, то есть не содержащим ни единого символа. А пустой символ -- это что-то непонятное. Символ он или есть, или его нет. SI> В этом примере Юникод можно не рассматривать и предполагать, что всего SI> существует 256 однобайтовых символов. Hет. Я *не знаю* как perl обрабатывает символы. Поэтому для меня минимальная единица информации -- символ. А уж сколько в нём байтов, а в байте битов я голову не забиваю. SI> Вопрос такой: почему здесь нет совпадения: SI> SI> '1'=~/\z[^\x00-\xff]/, SI> Потому, что в строке "1" нет подстроки "z". SI> а здесь оно есть: SI> SI> $a=''; (и также $a=undef;) '1'=~/\z$a/ ? SI> А здесь его по этой же причине быть не может. Поэтому я не понимаю, к чему эти примеры. Возможно под выражением "\z" имелось ввиду что-то отличное от символа 'z'? Hо и в таком случае совпадения быть не может -- регулярное выражение требует после "\z" наличия одного любого символа, кроме символов с кодами 0x00-0xff. То-есть строка должна состоять минимум как из двух символов. А если в текущей локали используется действительно 8-битная кодировка, то такое выражение специфицирует пустое множество символов, которому не соотвествует любой возможный символ, и такое выражение никогда не приведёт к совпадению с любой входной строкой. SI> Hарод почему-то не хочет понять суть вопроса и уходит в Юникод. Потому, что символ это не байт. Это символ. Символ это атом, он не делится ни на байты, ни на биты. Даже в однобайтовой локали -- это только создателям perl известно, как оно там внутри обрабатывается. --- [ZX] * Origin: 0D00 1E54 41D1 9753 3F41 40F7 4BBA 050B 30E8 0E4E (2:5030/1123.8) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/38338b6b576a.html, оценка из 5, голосов 10
|