【发布时间】:2012-02-07 12:31:51
【问题描述】:
我有几个小地方标记,例如'א,א' 'א,ב'。如果我们使用逗号作为中心点,我需要在逗号之前最多 2 个字符,并且到逗号之后的下一个空格。
我有(.-,.-)%s,但它没有做我需要的。有什么想法吗?
您也可以看到没有拉丁字母,所以使用%l 将不起作用。
【问题讨论】:
标签: lua lua-patterns
我有几个小地方标记,例如'א,א' 'א,ב'。如果我们使用逗号作为中心点,我需要在逗号之前最多 2 个字符,并且到逗号之后的下一个空格。
我有(.-,.-)%s,但它没有做我需要的。有什么想法吗?
您也可以看到没有拉丁字母,所以使用%l 将不起作用。
【问题讨论】:
标签: lua lua-patterns
这里有几个问题。首先,一个小问题:.-, 将在逗号之前尽可能少地匹配,即零字符。您应该锚定匹配字符串的开头。
更复杂的问题是您使用希伯来字母。问题是 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 的编码进行修改。另一个需要牢记的希伯来语书写方向是从右到左。
【讨论】: