加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex(lexer)支持unicode

发布时间:2020-12-15 02:13:33 所属栏目:百科 来源:网络整理
导读:我想知道最新版本的flex是否支持unicode? 如果是这样,怎样才能使用模式来匹配汉字? 更多: Use regular expression to match ANY Chinese character in utf-8 encoding 解决方法 目前,flex只生成8位扫描仪,这基本上限制了您使用UTF-8。所以如果你有一个
我想知道最新版本的flex是否支持unicode?

如果是这样,怎样才能使用模式来匹配汉字?

更多:
Use regular expression to match ANY Chinese character in utf-8 encoding

解决方法

目前,flex只生成8位扫描仪,这基本上限制了您使用UTF-8。所以如果你有一个模式:
肖晗   { printf ("xiaohann"); }

它将按预期工作,因为模式和输入中的字节序列将相同。字符类更困难。如果你想匹配字符肖或晗,你不能写:

[肖晗]   { printf ("xiaohan/2n"); }

因为这将匹配六个字节0xe8,0x82,0x96,0xe6,0x99和0x97中的每一个,这实际上意味着如果您提供肖晗作为输入,则模式将匹配六次。所以在这种简单的情况下,你必须将模式重写(肖|晗)。

对于范围,汉斯·阿伯格写了一个tool in Haskell,将其转换成8位模式:

Unicode> urToRegU8 0 0xFFFF
[-x7F]|[xC2-xDF][x80-xBF]|(xE0[xA0-xBF]|[xE1-xEF][x80-xBF])[x80-xBF]
Unicode> urToRegU32 0x00010000 0x001FFFFF
[x01-x1F][-xFF][-xFF]
Unicode> urToRegU32L 0x00010000 0x001FFFFF
[x01-x1F][-xFF][-xFF]

这不漂亮,但它应该工作。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读