1

我有几个小地方标记,例如'א,א' 'א,ב'。如果我们使用逗号作为中心点,我需要在逗号之前最多 2 个字符,并且在逗号之后最多需要下一个空格。

我有(.-,.-)%s,但它没有做我需要的。任何的想法?

此外,您可以看到没有拉丁字母,因此使用%l将不起作用。

4

1 回答 1

2

这里有几个问题。首先,一个小问题:.-,在逗号之前会尽可能少地匹配,即零字符。您应该锚定匹配字符串的开头。

更复杂的问题是您使用希伯来字母。问题是 Lua没有多字节字符的概念。

如果您使用 8 位编码,例如 Windows-1255 或 ISO-8859-8,那么您可能可以简单地匹配字符类[ת-א]。如果您正确设置了希伯来语语言环境,那么您%l应该可以正常工作。

如果您使用 UTF-8 或任何其他使用多字节字符的编码,则必须构造一个正则表达式,将所有希伯来字母转义为八位字节序列。aleph 是 U+05D0x,在 UTF-8 中将表示为0xD7 0x90. tav 是 U+05EA,它将被编码为0xD7 0xAA.

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

当然,上述推理必须针对不同于 UTF-8 的编码进行修改。希伯来语从右到左的书写方向是另一件事要记住。

于 2012-02-07T13:02:05.160 回答