#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()