Lua - получить индекс появления последнего символа в строке - PullRequest
0 голосов
/ 02 января 2019

У меня есть несколько строк, представляющих «пути» таблицы, которые можно использовать для итерации к значению в таблице, например:

"table.subTable[2].anotherTable"

"table.subTable.otherTable.anotherTable"

"table.subTable.otherTable[3]"

[2] и [3] - это индексы, которые могут указывать на другую таблицу.Мне нужно написать функцию, которая обрезает последний ключ / индекс так, чтобы «путь строки» указывал на предыдущую (или «родительскую») таблицу.

Например, приведенные выше строки должны превращаться в:

"table.subTable[2]"

"table.subTable.otherTable"

"table.subTable.otherTable"

IЯ подумал, что это можно сделать, найдя последние [ или . символов в строке и разделив их с помощью string.sub.

. Возможно, для этого есть много других способов, таких как gmatchно я не уверен как.Заранее спасибо!

1 Ответ

0 голосов
/ 02 января 2019

Если . и [ присутствуют только в синтаксисе индексации в строках, с которыми вы работаете, вы можете сделать path:match('(.+)[.[]').[.[] визуально сбивает с толку, но это набор, содержащий . и [.Вы можете экранировать [ с процентом ([.%[]), но это необязательно.

Если один из индексов таблицы является строкой, содержащей . или [, например table['sub.table'][3], это решение не удастся.В этом случае решение будет более сложным.Вы можете использовать LPeg или заменить . или [ в строках другой последовательностью символов перед выполнением сопоставления строк, а затем восстановить . или [ после сопоставления строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...