逗号周围的Lua模式匹配



我有几个小的地方标记,比如","。如果我们使用逗号作为中心点,我需要在逗号之前最多2个字符,直到逗号后面的下一个空格。

我有(.-,.-)%s,但它不能满足我的需要。知道吗?

也正如你所看到的,没有拉丁字母,所以使用%l将不起作用。

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

更复杂的问题是你使用希伯来语字母。问题是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的编码,必须修改以上推理。希伯来语中从右到左的书写方向是另一件需要记住的事情。

最新更新