Вопрос

У меня есть строка, как hello /world today/

Мне нужно заменить /world today/ с участием /MY NEW STRING/

Чтение руководства, которое я нашел

newString = string.match("hello /world today/","%b//")

который я могу использовать с gsub заменить, но я задавался вопросом, есть также элегантный способ вернуть только текст между /, Я знаю, что могу просто обрезать его, но мне интересно, был ли шаблон.

Это было полезно?

Решение

Попробуйте что-то вроде одного из следующих действий:

  • slashed_text = string.match("hello /world today/", "/([^/]*)/")
  • slashed_text = string.match("hello /world today/", "/(.-)/")
  • slashed_text = string.match("hello /world today/", "/(.*)/")

Это работает, потому что string.match Возвращает любые захваты от шаблона или весь соответствующий текст, если нет захватов. Затем ключей должен убедиться, что узор имеет правильное количество жадности, запоминание того, что узоры Lua не являются полным языком регулярного выражения.

Первые два должны соответствовать той же текстам. Во-первых, я прямо требовал, чтобы шаблон соответствовал как можно больше несушится. Второе (спасибо LHF) соответствует кратчайшему расстоянию любых символов, а затем слеш. Третий жарит, он соответствует самую длинному промежутку персонажей, которые все еще следует слеш.

То %b// В оригинальном вопросе нет никаких преимуществ /.-/ Поскольку два разделителя являются одинаковым характером.

Редактировать: Добавлен образец, предложенный LHF и более объяснениями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top