Lua: найти строку между двумя строками

#lua

#lua

Вопрос:

 local code = [[
    print("this is a trap")    
    asd("XDasdsadasdasd")
    print("this is a trap")
]]
print("nnnnn")
print(string.match(code, 'asd(.*)'))
 

Я сделал это, но проблема в том, что он также возвращает печать под ним. Он вернет все, что находится под asd («XDasdsadasdasd»), но я хочу, чтобы возвращалось только то, что находится внутри asd («XDasdsadasdasd»), это будет «XDasdsadasdasd»

Комментарии:

1. читать lua.org/manual/5.4/manual.html#6.4.1 скобки определяют захват, если он не экранирован с помощью %

Ответ №1:

Круглые скобки — это магические символы в шаблонах Lua. Вам нужно убежать от них. Кроме того, вам нужно остановиться на первой закрывающей скобке. Смотрите код ниже:

 print(string.match(code, 'asd%(.-%)'))
 

Если вам нужно только то, что внутри asd(...) , тогда используйте

 print(string.match(code, 'asd%((.-)%)'))
 

Комментарии:

1. Как бы это было, если бы их было больше одного local code = [[ asd("one") print("bait") asd("twio") ]] , потому что я считаю, что требуется только первое

2. @Birk, используй цикл с string.gmatch .

3. @lhf Не лучше ли было бы использовать %b() ?

4. @Spar, возможно, но если строка может содержать круглые скобки, то ни мое решение, ни ваше не работают.

5. @lhf Есть ли более правильный способ? %(%) против %b()