【发布时间】:2019-04-13 12:58:37
【问题描述】:
第 6.4.1 节 Lua 模式状态中的 Lua manual
一个字符类用于表示一组字符。这 描述字符类时允许以下组合:
x:(其中x不是^$()%.[]*+-?的魔术字符之一)代表字符x 本身。.:(一个点)代表所有字符。%a:代表所有字母。%c:代表所有控制字符。%d:代表所有数字。%g:表示除空格外的所有可打印字符。%l:代表全小写。%p:代表所有标点符号。%s:代表所有空格字符。%u:代表全大写。%w:代表所有字母数字字符。%x:代表所有十六进制数字。%x:(其中 x 是任何非字母数字字符)表示字符 x。这是逃脱魔法角色的标准方法。 任何非字母数字字符(包括所有标点符号、 即使是非魔法)也可以在用于表示时以%开头 本身在一个模式。[set]:代表set中所有字符联合的类。可以通过分隔结尾来指定字符范围 范围内的字符,按升序排列,带有-。所有课程 上述%x也可以用作集合中的组件。所有其他set中的字符代表他们自己。例如,[%w_](或[_%w]) 表示所有字母数字字符加上下划线,[0-7]代表八进制数字,[0-7%l%-]代表 八进制数字加上小写字母加上-字符。您可以将右方括号放在集合中,方法是将其定位为 集合中的第一个字符。您可以在集合中放置一个连字符 将其定位为集合中的第一个或最后一个字符。 (你可以 在这两种情况下也使用转义符。)
范围和类之间的交互没有定义。因此,像 [%a-z] 或 [a-%%] 这样的模式没有意义。
[^set]:表示set的补集,这里set被解释 如上。对于由单个字母(
%a、%c等)表示的所有类, 对应的大写字母代表类的补码。 例如,%S 代表所有非空格字符。字母、空格和其他字符组的定义取决于 当前语言环境。特别是,
[a-z]类可能不是 相当于%l。
(我添加的突出显示和一些格式)
所以,由于“范围和类之间的交互没有定义。”,你如何创建一个字符类set,它以需要的(魔术)字符开头和/或结尾被逃脱?
例如,
[%%-c]
没有定义范围从% 到c 的字符类,并且包括介于两者之间的所有字符,而是仅包含三个字符%、- 和c 的集合。
【问题讨论】:
-
这个问题最近出现在一个已关闭并随后被删除的帖子中。但是,我认为这是一个值得记录的有趣问题。
标签: lua lua-patterns