Lua模式匹配逗号

时间:2012-02-07 12:31:51

标签: lua lua-patterns

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

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

另外,您可以看到没有拉丁字母,因此使用%l将无效。

1 个答案:

答案 0 :(得分:2)

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

更复杂的问题是你使用希伯来字母。问题是Lua has no concept多字节字符。

如果您使用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的编码,必须修改上述推理。希伯来语中从右到左的写作方向是另一回事。