Используйте string.gsub для замены строк, но только целых слов.

У меня есть скрипт замены поиска, который работает для замены строк. У него уже есть опции для поиска без учета регистра и «экранированных» совпадений (, например, позволяет искать % (и т. д. в поиске.

Когда-либо меня теперь просили сопоставлять только целые слова, я пробовал добавлять %s к каждому концу, но это не соответствует словам в конце строки, и я не могу понять, как перехватывать для найденные элементы белого-пространства оставили их нетронутыми во время замены.

Нужно ли переделывать скрипт с помощью string.find и добавлять логику для проверки слов или это возможно с шаблонами.

Две функции, которые я использую для нечувствительных к регистру и экранированных элементов, следующие: обе возвращают шаблон для поиска.

    --   Build Pattern from String for case insensitive search
function nocase (s)
      s = string.gsub(s, "%a", function (c)
            return string.format("[%s%s]", string.lower(c),
                                           string.upper(c))
          end)
      return s
    end
function strPlainText(strText)
    -- Prefix every non-alphanumeric character (%W) with a % escape character, where %% is the % escape, and %1 is original character
    return strText:gsub("(%W)","%%%1")
end 

У меня есть способ делать то, что я хочу сейчас, но это неэлегантно. Есть ли способ лучше?

   local strToString = ''
     local strSearchFor = strSearchi
    local strReplaceWith = strReplace
    bSkip = false
    if fhGetDataClass(ptr) == 'longtext' then
        strBoxType = 'm'
    end
   if pWhole == 1 then
    strSearchFor = '(%s+)('..strSearchi..')(%s+)'
    strReplaceWith = '%1'..strReplace..'%3'
    end
    local strToString = string.gsub(strFromString,strSearchFor,strReplaceWith)
    if pWhole == 1 then
    -- Special Case search for last word and first word
        local strSearchFor3 = '(%s+)('..strSearchi..')$'
        local strReplaceWith3 = '%1'..strReplace
        strToString = string.gsub(strToString,strSearchFor3,strReplaceWith3)
        local strSearchFor3 = '^('..strSearchi..')(%s+)'
        local strReplaceWith3 = strReplace..'%2'
        strToString = string.gsub(strToString,strSearchFor3,strReplaceWith3)
    end
6
задан Jane T 19 April 2012 в 17:16
поделиться