Здравствуйте, 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}]}