【问题标题】:Lua pattern match around comma逗号周围的 Lua 模式匹配
【发布时间】:2012-02-07 12:31:51
【问题描述】:

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

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

您也可以看到没有拉丁字母,所以使用%l 将不起作用。

【问题讨论】:

    标签: lua lua-patterns


    【解决方案1】:

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

    更复杂的问题是您使用希伯来字母。问题是 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 的编码进行修改。另一个需要牢记的希伯来语书写方向是从右到左。

    【讨论】:

    • 这可能是我最好的选择,谢谢。但是有什么办法可以让我抓住给定字符后面的 2 个字母?例如,如果我有 'abc,def' 我想在 ' 之前获得 2 个字母,那么这将是 'bc'。
    • @cnotethegr8:帮自己一个忙,阅读the owl book
    • 嗯,它没有说它超过了 Lua 的“模式匹配”。 (这与正则表达式不同。)我知道如何使用正则表达式来做到这一点,但 Lua 是不同的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2019-03-29
    • 1970-01-01
    • 2012-08-30
    • 2011-02-03
    • 2019-07-26
    • 2020-10-27
    相关资源
    最近更新 更多