Любая альтернатива шаблону Lua регулярному выражению (\\. |.)?

Существует распространенная идиома для обхода строки, символы которой могут быть экранированы обратной косой чертой с помощью регулярного выражения (\\.|.), например:

alert( "some\\astring".replace(/(\\.|.)/g, "[$1]") )

Это в JavaScript. Этот код изменяет строку some\astring на [s][o][m][e][\a][s][t][r][i][n][g].

Я знаю, что шаблоны Lua не поддерживают оператор OR, поэтому мы не можем напрямую преобразовать это регулярное выражение в шаблон Lua.

Тем не менее, мне было интересно: есть ли альтернативный способ сделать это (обход, возможно, экранированные символы) в Lua, используя шаблон Lua?


person Niccolo M.    schedule 07.04.2014    source источник


Ответы (1)


Можешь попробовать

(\\?.)

и заменить на [$1]

См. в Regexr.

? - это сокращенный квантификатор для случаев появления 0 или 1, поэтому приведенный выше шаблон соответствует предшествующему символу и необязательной обратной косой черте. Если ? не работает (я не знаю lua), вы можете попробовать {0,1}. Это длинная версия того же самого.

person stema    schedule 07.04.2014
comment
Хороший ответ. Чтобы было понятнее на случай, если OP задается вопросом, в (\\.|.) порядок чередования важен, но поскольку ? является жадным квантификатором, он действительно всегда будет пытаться \\. перед попыткой . ({0,1} также сначала попробует 1 решение) - person Robin; 07.04.2014
comment
В Lua %1 находится на месте $1. В остальном ваш шаблон должен работать: string.gsub("some\\astring", "(\\?.)", "[%1]") - person Yu Hao; 07.04.2014
comment
Вау, спасибо за простой ответ! (Надеюсь, я не единственный, кто иногда не видит простых решений ...) - person Niccolo M.; 08.04.2014