Lua模式匹配逗号周围的内容

我有几个小的标记,如'א,א' 'א,ב'。如果我们以逗号为中心点,则逗号之前最多需要2个字符,并且可以在逗号之后的下一个空格处停止。

我有(.-,.-)%s,但它没有做我所需要的。有什么想法吗?

另外,正如您所看到的,它们不是拉丁字母,因此使用%l无法正常工作。

原文链接 https://stackoverflow.com/questions/9176319

点赞
stackoverflow用户122460
stackoverflow用户122460

这里存在一些问题。首先,一个小问题是:在逗号之前,“.-,”会尽可能匹配最少的字符,也就是零个字符。你应该锚定匹配字符串的开头。

更复杂的问题是,你使用了希伯来文字母。问题在于 Lua 没有概念 关于多字节字符。

如果你使用像 Windows-1255 或 ISO-8859-8 这样的 8 位编码,那么你可能可以简单地匹配字符类 [ת-א]。如果你已经正确设置了希伯来语环境变量,%l 对你来说应该可以很好地工作。

如果你使用 UTF-8 或任何其他使用多字节字符的编码,那么你必须构造一个正则表达式,将所有希伯来字母作为八位序列进行转义。阿列夫是 U+05D0x,UTF-8 中将表示为 0xD7 0x90。塔夫是 U+05EA,将被编码为 0xD7 0xAA

在 Lua 中,你可以使用反斜杠 + 十进制代码转义任何 8 位字符。在 UTF-8 中编码的所有希伯来字符的第一个字节都是相同的——0xD7,也就是 "\215"。第二个字符可以是任何从 "\144""\170" 的值。因此,将匹配单个希伯来字母的正则表达式是:"\215[\144-\170]"。将其放在你原来使用单个点匹配任何字符的正则表达式中。

当然,以上推理必须针对与 UTF-8 不同的编码进行修改。在希伯来语中,从右向左的书写方向是另一个需要注意的事情。

2012-02-07 13:02:05