Ich habe ein Search Replace-Skript, das zum Ersetzen von Zeichenfolgen verwendet wird. Es hat bereits Optionen, um Groß-/Kleinschreibung und "maskiert" Übereinstimmungen zu machen (zB erlaubt Suche nach% (etc in der Suche).Verwenden Sie string.gsub, um Zeichenfolgen zu ersetzen, aber nur ganze Wörter
Wie auch immer ich nun aufgefordert wurde, nur ganze Wörter zu finden, habe ich versucht,% s hinzuzufügen Jedes Ende, aber das stimmt nicht mit den Wörtern am Ende eines Strings überein, und ich kann dann nicht herausfinden, wie man die gefundenen Leerraumfelder während des Ersetzens intakt hält.
Muss ich wiederholen? Das Skript verwendet string.find und fügt Logik für die Wortüberprüfung hinzu oder dies mit Mustern möglich
Die beiden Funktionen, die ich für Groß-/Kleinschreibung und Escape-Elemente verwende, geben beide das Muster zurück, nach dem gesucht wird:
-- 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
Ich habe einen Weg zu tun, was ich jetzt will, aber es ist unelegant. Gibt es einen besseren Weg?
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
Nein, was ich tun müssen, ist die verarbeitete Suchtext habe ich jetzt nutzen oder eine Variante und es nur ganze Wörter zu finden, so suche ich nach "Straße" und es wird nur "Straße" und nicht "Broadstreet" –
Wie verwenden Sie die Werte, die Sie von nocase() und strPlainText() erhalten ? das ist viel relevanter ... –