Tôi có tập lệnh thay thế tìm kiếm hoạt động để thay thế chuỗi. Nó đã có các tùy chọn để thực hiện các tìm kiếm phân biệt chữ hoa chữ thường và các kết quả "thoát" (ví dụ: cho phép tìm kiếm% (v.v. trong tìm kiếm.Sử dụng string.gsub để thay thế chuỗi, nhưng chỉ toàn bộ các từ
Làm thế nào bây giờ tôi được yêu cầu khớp toàn bộ từ, tôi đã thử thêm% s vào mỗi đầu, nhưng điều đó không khớp với các từ ở cuối chuỗi và sau đó tôi không thể tìm ra cách để bẫy các mục không gian trắng được tìm thấy để nguyên vẹn chúng trong khi thay thế. tập lệnh bằng cách sử dụng string.find và thêm logic cho việc kiểm tra từ hoặc điều này có thể với mẫu.
Hai chức năng tôi sử dụng cho các mục không phân biệt chữ hoa và chữ thường như sau đều trả về mẫu để tìm kiếm.
-- 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
Tôi có cách làm những gì tôi muốn ngay bây giờ, nhưng nó không phù hợp. Có cách nào tốt hơn?
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
Không những gì tôi cần làm là sử dụng chuỗi tìm kiếm xử lý tôi có bây giờ hoặc biến thể và làm cho nó chỉ khớp với toàn bộ từ, vì vậy tôi tìm kiếm "đường phố" và nó sẽ chỉ khớp với "đường phố" chứ không phải "broadstreet" –
bạn đang sử dụng các giá trị bạn nhận được từ nocase() và strPlainText() như thế nào ? điều đó liên quan nhiều hơn ... –