Есть ли способ получить libc6
функции regexp regcomp
и regexec
для правильной работы с многобайтовыми символами?многобайтовые символы в libc regcomp и regexec
Например, если мой шаблон является символами utf8 猫机+猫
, поиск совпадения в закодированной по utf8 строке 猫机机机猫
не удастся, где он будет успешным.
Я думаю, что это происходит потому, что характер 机
«s байт представление \xe6\x9c\xba
и +
является соответствие один или несколько байт \xba
. Я могу заставить этот экземпляр работать, помещая круглые скобки вокруг каждого многобайтового символа в шаблоне, но поскольку это для приложения, я не могу требовать от пользователя этого.
Есть ли способ пометить шаблон или строку для соответствия содержанию символов utf8? Возможно, сообщите libc
, чтобы сохранить шаблон как wchar вместо char?
Parens вокруг многобайтового символа не помогают? – stark
Я могу это сделать, но я надеюсь на решение, которое не требует от пользователя изменения шаблона таким образом. Однако, спасибо! Я отредактировал вопрос, чтобы отразить ваш комментарий. –
Почему бы просто не использовать кодовые страницы '\ x {nnnnnnn}'? То есть, если механизм регулярных выражений должен поддерживать Unicode. Обычно строка регулярных выражений и целевых строк должна использовать одну и ту же кодировку, но не рекомендуется использовать буквенные символы Unicode в строке регулярного выражения. Если двигатель поддерживает его, он читает символ в единицах char, а не в байтах. – sln