Re: [Erlang]Как нынче принято хранить строки внутри приложен
От: Odobenus Rosmarus  
Дата: 07.07.09 01:32
Оценка: 12 (1)
Здравствуйте, Mr.Cat, Вы писали:

MC>Обратил внимание, что модуль re не может нормально работать со строками, которые представлены списками символов (которые, например, получаются, если просто в консоли закавычить русские буквы) и прекрасно работает со списками utf8-байт.

MC>Т.е. для одного и того же регекспа (он содержит только латиницу) получаю:
MC>
17>> re:run("abcd", Re).
MC>nomatch
18>> re:run("абвг", Re).
MC>** exception error: bad argument
MC>     in function  re:run/2
MC>        called as re:run([1072,1073,1074,1075],
MC>                         {re_pattern,1,0,
MC>                                     <<69,82,67,80,97,0,0,0,0,2,0,0,7,0,0,0,
MC>                                       1,0,0,0,34,0,34,...>>})
MC>

MC>Т.е., получается, для внутреннего представления строк стоит юзать utf-8 бинари, либо списки utf8-байт?

MC>Если имеет значение:

MC>
MC>Erlang R13B (erts-5.7.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
MC>



14> {ok,E3} = re:ucompile("asd*",[]). 
{ok,{re_pattern,0,0,
                <<69,82,67,80,53,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,97,0,115,
                  ...>>}}
15> re:urun("Привет",E3,[]).         
nomatch

12> {ok,E2} = re:ucompile("Прив*",[]).
{ok,{re_pattern,0,0,
                <<69,82,67,80,63,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,208,0,
                  208,...>>}}
13> re:urun("Привет",E2,[]).          
{match,[{0,8}]}
--
Odobenus Rosmarus, hochpersonlich
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.