我有几个小地方标记,如'א,א''א,ב'。如果我们使用逗号作为中心点,我在逗号之前最多需要2个字符,直到逗号之后的下一个空格。
我有(.-,.-)%s
但它没有做我需要的事情。有什么想法吗?
另外,您可以看到没有拉丁字母,因此使用%l
将无效。
答案 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的编码,必须修改上述推理。希伯来语中从右到左的写作方向是另一回事。