Шаблон Lua для выбора определенной строки, за которой следует любое слово

Может ли кто-нибудь сообщить мне, почему я не могу выбрать CWIND7x32\ab_c1 в приведенном ниже коде?

s="[cC][wW][iI][nN]7[xX]32"
local p= (tostring(s).."\\([%%w_]+)?")
local c = "##\\##"
print(p)
tstr = "Pattern CWINd7x32\\ab_c1 is valid"
print(tstr)
res=string.gsub(tstr,p,c)
print(res)

Я хочу, чтобы шаблон выбирал любое слово в формате CWINDX32\любое слово, где CWINDX32 должно быть нечувствительным к регистру словом.

Обратите внимание, что слово может состоять только из буквенно-цифровых символов и символов подчеркивания и может заканчиваться пробелом или ; или или :

Пример:

Шаблон CWINd7x32\ab_c1 действителен -> Шаблон ##\## действителен

Узор cWIND7x32\efg; действителен -> Pattern ##\##; является действительным

Шаблон CWIND7X32\random_user, действителен -> Шаблон ##\##, действителен


person Namitha    schedule 24.03.2015    source источник


Ответы (1)


Во-первых, вы пропустили [dD] в шаблоне, что, я думаю, является опечаткой.

Есть еще некоторые другие проблемы.

  • ? в шаблонах Lua применяется только к одному символу, поэтому "\\([%%w_]+)?" недействителен.
  • %% — это экранированный символ %, [%%w_] соответствует символу %, w или символу подчеркивания _, что не соответствует вашим ожиданиям.

Фиксированный шаблон — [cC][wW][iI][nN][dD]7[xX]32\[%w_]+.

person Yu Hao    schedule 24.03.2015
comment
Спасибо за ваш быстрый ответ - person Namitha; 24.03.2015