Я хотел бы знать в lua, как мы можем это сделать:
local test = "Hey Hello World"
local extract = string.match(test, "I don't know what to put here")
print(extract)
Результат = Привет, мир
я пробовал с
local test = "Hey Hello World"
local extract = string.match(test, "^.*%s(.*)")
print(extract)
Но результат = "Мир"
Нет, я хочу получить все после первого пробела.
local test = "Hey Hello World"
local extract = string.match(test, "^.*%s(.*)")
print(extract)
почти правильно, но несколько усложнено. Результат просто "World"
, потому что он не получит все после первый, а скорее все после пробела прошлой, потому что первый .*
жадный - он будет соответствовать столько, сколько может. Ваш шаблон можно было бы исправить, если бы вы просто использовали вместо него .-
, который будет соответствовать как можно меньшему количеству символов: "^.-%s(.*)"
дает желаемый результат.
Однако ваш шаблон можно значительно упростить, просто опустив начальную привязку шаблона ^
, поскольку шаблоны Lua всегда идут слева направо, а (.*)
будет жадным совпадением до конца: "%s(.*)"
предоставит вам строку после первого символа пробела (может быть пустым). Если вы хотите разрешить двойные пробелы, вы должны использовать квантификатор для первого интервала: "%s+(.*)"
.
Шаблон lhf " (.+)"
также является вариантом, предполагая простое пространство ASCII и предполагая, что вы хотите, чтобы возвращаемое совпадение было непустой строкой или
nil
.
Вы имеете в виду это?
extract = string.match(test, " (.+)")
.