gpt4 book ai didi

regex - JFlex 字符串正则表达式奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 12:25:05 24 4
gpt4 key购买 nike

我正在尝试在 JFlex 中编写一个 JSON 字符串解析器,到目前为止我有

string = \"((\\(\"|\\|\/|b|f|n|r|t|u[0-9a-fA-F]{4})) | [^\"\\])*\"

我认为它符合规范 ( http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf )。我已经在控制字符和标准字符和符号上对其进行了测试,但由于某种原因它不接受 £ 或 ( 或 ) 或 ¬。有人可以让我知道是什么导致了这种行为吗?

最佳答案

也许您正在以 JLex 兼容模式运行?如果是这样,请参阅官方 JFlex 用户手册中的以下内容。好像默认输入的是7bit字符码,而你要的是16bit(unicode)。

您可以通过在第一个 %% 之后添加行 %unicode 来解决这个问题。

输入字符集

%7bit

使生成的扫描器使用 7 位输入字符集(字符代码 0-127)。如果在运行时输入中遇到代码大于 127 的输入字符,扫描器将抛出 ArrayIndexOutofBoundsException。不仅如此,您还应该考虑使用 %unicode 指令。有关字符编码的信息,另请参阅编码。这是 JLex 兼容模式中的默认设置。

%full
%8bit

这两个选项都会导致生成的扫描器使用 8 位输入字符集(字符代码 0-255)。如果在运行时输入中遇到代码大于 255 的输入字符,扫描器将抛出 ArrayIndexOutofBoundsException。请注意,即使您的平台每个字符只使用一个字节,一个字符的 Unicode 值仍可能大于 255。如果您正在扫描文本文件,您应该考虑使用 %unicode 指令。有关字符编码的更多信息,另请参阅 Econdings 部分。

%unicode
%16bit

这两个选项都会导致生成的扫描器使用完整的 Unicode 输入字符集,包括补充代码点:0-0x10FFFF。 %unicode 并不意味着扫描器将一次读取两个字节。读取的内容和构成字符的内容取决于运行时平台。有关字符编码的更多信息,另请参阅编码部分。这是默认设置,除非使用 JLex 兼容模式(命令行选项 --jlex)。

关于regex - JFlex 字符串正则表达式奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40633762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com