CountChars

From Warcraft Wiki
Jump to navigation Jump to search
This is a user-defined function that you can copy and paste into your addon.

Return how many times needle is contained in haystack.

number = <PREFIX>_CountChars(haystack, needle)

Function Parameters

Arguments

haystack
String - The search subject.
needle
The string to look for. needle can be a regular expression ('[a-z%s%d]' will count all alphanumeric characters and white spaces)
Notes
Arguments are cast into strings before any processing is done.
The search is not case-sensitive.

Returns

number
Number of times needle is contained in haystack. If needle is not found, returns 0.


Example

number1 = <PREFIX>_CountChars("World of Warcraft", 'o')
number2 = <PREFIX>_CountChars("World of Warcraft", 'w[a-z]')
number3 = <PREFIX>_CountChars("World of Warcraft", 'r[a-z]')
number4 = <PREFIX>_CountChars("World of Warcraft", 'r[a-z][a-z]')

Result

number1 = 2
number2 = 2
number3 = 3
number4 = 3

Code

function <PREFIX>_CountChars (haystack, needle)
    haystack = strlower(tostring(haystack));
    needle = strlower(tostring(needle));
    local ret, pos = 0, 0
    for i = 1, strlen(haystack) do
        local s, e = strfind(haystack, needle, pos)
        if e then
            pos = e
            if s == e then
                pos = pos + 1
            end
        end
        if s and e then
            ret = ret + 1;
        else
            break -- If it hasn't found any more, there's no reason to continue
        end
    end
    return ret
end