【问题标题】:Any Lua pattern alternative to the regex (\\.|.)?正则表达式 (\\.|.) 的任何 Lua 模式替代方案?
【发布时间】:2014-05-19 18:01:02
【问题描述】:

使用正则表达式(\\.|.) 来遍历字符串有一个常见的习惯用法,该字符串的字符可以用反斜杠转义,如下所示:

alert( "some\\astring".replace(/(\\.|.)/g, "[$1]") )

那是在 JavaScript 中。此代码将字符串some\astring 更改为[s][o][m][e][\a][s][t][r][i][n][g]。

我知道 Lua 模式不支持 OR 运算符,所以我们不能将这个正则表达式直接翻译成 Lua 模式。

然而,我想知道:在 Lua 中是否有另一种方法可以做到这一点(遍历可能转义的字符),使用 Lua 模式?

【问题讨论】:

    标签: lua lua-patterns


    【解决方案1】:

    你可以试试

    (\\?.)
    

    并替换为[$1]

    见it on Regexr。

    ? 是 0 或 1 次出现的快捷量词,因此上述模式匹配之前的字符和可选的反斜杠。如果? 不工作(我不知道lua)你可以尝试{0,1}。那是相同的长版本。

    【讨论】:

    • 不错的答案。为了更清楚地说明 OP 想知道的情况,在(\\.|.) 中,交替的顺序很重要,但由于? 是一个贪婪的量词,它确实总是在尝试. 之前尝试\\.({0,1} 将也请先尝试1 解决方案)
    • 在 Lua 中,%1 代替了$1。除此之外,您的模式应该可以工作:string.gsub("some\\astring", "(\\?.)", "[%1]")
    • 哇,感谢您的简单回答! (我希望我不是唯一一个有时看不到简单解决方案的人......)
    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2021-05-21
    • 1970-01-01
    • 2018-03-22
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多