我曾经用一个简单的方法迭代字符串中的行
for line in s:gmatch("[^\r\n]+") do
效果很好!然后现实生活发生了......
.... 现在我的要求发生了变化:我也需要匹配空行。这就是问题所在:由于这种迭代形式在几个本身都是丛林的地方使用,我想尽可能避免更改周围的代码。由于对上述功能无法匹配的微妙预期,到目前为止,我对gmatch
/的尝试无法为上述模式创建一个“插入式”替代品。find
我寻求的构造 ( for line in some_matcher(s) do
) 符合以下要求,我相信这些要求涵盖了我担心的所有边缘情况:
INPUT EXPECTATIONS
1. '' -- match once ('')
2. '\r\n' -- match twice ('', '')
3. '\r\n\r\n' -- match thrice ('', '', '')
4. 'aaa' -- match once ('aaa')
5. 'aaa\r\n' -- match twice ('aaa', '')
6. 'aaa\r\nbbb' -- match twice ('aaa', 'bbb')
7. '\r\nbbb' -- match twice ('', 'bbb')
我的旧解决方案假设只\r\n
发生行尾,如果新解决方案只处理这种情况,那就完全没问题了。
但是,由于在我的商店中讨论了 Linux 支持计划,因此非常感谢一个也处理更简单的\n
行尾(为了未来的 unix 兼容性)的答案,并在几个月后重新访问这个问题. 然而,问题在于,在许多情况下,我需要在原始字符串输入中使用此匹配项的起始列。如果上面的构造 ( for ... do
) 可以输出它作为额外的好处,那将特别棒。