Dizeleri değiştirmeye çalışan bir arama değiştirme komut dosyası var. Zaten büyük/küçük harf duyarsız aramalar ve "kaçtı" eşleşmeleri yapma seçenekleri vardır (örneğin, arama için% aranmasına izin verir.Dizeleri değiştirmek için string.gsub işlevini kullanın, ancak yalnızca tüm kelimeler
Artık yalnızca tüm sözcükleri eşleştirmem istendi,% s eklemeye çalıştım. her bir son, ama bu bir dizenin sonunda kelimelerle eşleşmiyor ve bu durumda, bu boşluklar sırasında değiştirilen beyaz boşluklu nesnelerin nasıl değiştirileceğini öğrenemiyorum.
Yeniden yapmam gerekiyor mu? betik string.find kullanarak ve bu sözcükleri kontrol etmek için mantık ekleyebilir veya desenler ile bu mümkün olabilir
Büyük/küçük harfe duyarlı ve kaçılan öğeler için kullandığım iki işlev, her ikisini de aramayı döndürür.
-- 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
Şimdi istediğimi yapmanın bir yolunu biliyorum, ancak bu hiç de yetersiz. Daha iyi bir yolu var mı? Eğer nocase() foo geçirirseniz
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
Ben şimdi sahip işlenmiş arama dizesi kullanmak yapmanız gerekenler yok ya da bir varyasyon ve sadece tüm kelimeleri eşleştirmek için olsun, bu yüzden "sokak" için arama ve sadece "sokak" eşleşecek ve "broadstreet" değil –
eşleşir nocase() ve strPlainText() geri almak değerlerini nasıl kullanıyorsunuz ? Bu çok daha alakalı ... –