我有几个小的地方标记,比如","。如果我们使用逗号作为中心点,我需要在逗号之前最多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的编码,必须修改以上推理。希伯来语中从右到左的书写方向是另一件需要记住的事情。