Обратил внимание, что модуль re не может нормально работать со строками, которые представлены списками символов (которые, например, получаются, если просто в консоли закавычить русские буквы) и прекрасно работает со списками utf8-байт.
Т.е. для одного и того же регекспа (он содержит только латиницу) получаю:
17> re:run("abcd", Re).
nomatch
18> re:run("абвг", Re).
** exception error: bad argument
in function re:run/2
called as re:run([1072,1073,1074,1075],
{re_pattern,1,0,
<<69,82,67,80,97,0,0,0,0,2,0,0,7,0,0,0,
1,0,0,0,34,0,34,...>>})
Т.е., получается, для внутреннего представления строк стоит юзать utf-8 бинари, либо списки utf8-байт?
Здравствуйте, 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>
Здравствуйте, Odobenus Rosmarus, Вы писали: OR>Я обычно в исходниках смотрю.
Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).
Re[5]: [Erlang]Как нынче принято хранить строки внутри прило
Здравствуйте, Mr.Cat, Вы писали: MC>Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).
Только они, похоже, глючно это делают.
Re[6]: [Erlang]Как нынче принято хранить строки внутри прило
А, ну и xmerl я так и не смог заставить нормално принимать на вход списки символов. То scan сыпется, то export. Так что в качестве внутреннего представления сейчас использую списки utf8-байт.
Re[6]: [Erlang]Как нынче принято хранить строки внутри прило
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Mr.Cat, Вы писали: MC>>Похоже, действительно полезно почаще заглядывать в исходники. Оказалось, что ucompile/urun — обертки над compile/run, которые сперва конвертят все в utf8, потом обратно (в т.ч. и позиции матча).
MC>Только они, похоже, глючно это делают.
А в чем глючность? чтобы знать на будущее?
--
Odobenus Rosmarus, hochpersonlich
Re[7]: [Erlang]Как нынче принято хранить строки внутри прило
Здравствуйте, Odobenus Rosmarus, Вы писали: OR>А в чем глючность? чтобы знать на будущее?
Я вполне могу ошибаться (в том плане, что это я сам где-то накосячил), но у меня получалось, что urun возвращал некорректное значение позиции, с которой начинается матч.