Lua:如何在一个字符后开始匹配

我正在尝试制作一个搜索功能,允许您在插入|字符并搜索输入后将搜索分成两个部分。到目前为止,我已经理解了如何通过在空格之前捕获来保留主要命令。

例如,如果我键入:ban user,下面的框仍将显示:ban,但是当我输入|时,它会重新开始搜索。

:ba
:ba

:ban user|:at
:at

:ban user|:attention members|:kic
:kic

该代码:

text=“:ban user|:at”
 text=text:match("(%S+)%s+(.+)")
 print(text)

仍会返回禁令。

点赞
用户3832970
用户3832970

我试图寻找最后一个 | 字符之后的匹配项。

然后你可以使用

text=":ban user|:at"
new_text=text:match("^.*%|(.*)")
if new_text == nil then new_text = text end
print(new_text)

请参见Lua演示

解释

  • .* - 匹配任何0+字符 _尽可能多地_(以"贪婪"方式匹配,因为整个字符串都被抓取,然后回溯发生以找到...)
  • %| - 最后一个字面值的 |
  • (.*) - 匹配和捕获任何0+字符(直到字符串的末尾)。
2016-04-14 08:53:26
用户107090
用户107090

为了避免特殊情况,请确保字符串始终包含 |

function test(s)
    s="|"..s
    print(s:match("^.*|(.*)$"))
end

test(":ba")
test(":ban user|:at")
test(":ban user|:attention members|:kic")
2016-04-14 10:53:30