Wowpedia

We have moved to Warcraft Wiki. Click here for information and the new URL.

READ MORE

Wowpedia
Advertisement

Returns a pair of numbers representing the start and end of the first occurrence of the pattern within the string, if it exists.

startPos, endPos = string.find(string, pattern [, initpos [, plain]])
startPos, endPos = strfind(string, pattern [, initpos [, plain]])

Arguments[]

string
string - The string to examine.
pattern
string - The pattern to search for within string. This pattern is similar to Unix regular expressions, but is not the same -- see Lua Pattern matching for more details.
initpos
number - Index of the character within string to begin searching. As is usual for Lua string functions, 1 refers to the first character of the string, 2 to the second, etc. -1 refers to the last character of the string, -2 to the second last, etc. If this argument is omitted, it defaults to 1; i.e., the search begins at the beginning of string.
plain
boolean - Whether or not to disable regular expression matching. Defaults to false, so regex matching is usually enabled.

Returns[]

startPos
number - The position of the first character of the first occurrence of the pattern.
endPos
number - The position of the last character of the first occurrence of the pattern.

Example[]

Find the first occurrence of the pattern in the string passed. If an instance of the pattern is found a pair of values representing the start and end of the string is returned. If the pattern cannot be found nil is returned.

> = string.find("Hello Lua user", "Lua")
7       9
> = string.find("Hello Lua user", "banana")
nil

We can optionally specify where to start the search with a third argument. The argument may also be negative which means we count back from the end of the string and start the search.

> = string.find("Hello Lua user", "Lua", 1)  -- start at first character
7       9
> = string.find("Hello Lua user", "Lua", 8)  -- "Lua" not found again after character 8
nil
> = string.find("Hello Lua user", "e", -5)   -- first "e" 5 characters from the end
13      13

The pattern argument can be a regular expression which allows more complex searches. See the Patterns Tutorial on Lua-Users.org and Pattern matching for more information. We can turn off the regular expression feature by using the optional fourth argument plain. plain takes a boolean value and must be preceded by init. E.g.,

> = string.find("Hello Lua user", "%su")          -- find a space character followed by "u"
10      11
> = string.find("Hello Lua user", "%su", 1, true) -- turn on plain searches, now not found
nil

Sometimes it's more appropriate to use string.find, rather than string.gmatch, eg:

local msg = "Phase2:- There isn't any need for iterating over this mini-string.";
local startPos, endPos, firstWord, restOfString = string.find( msg, "(%w+)[%s%p]*(.*)");

Result:

startPos = 1
endPos = 66
firstWord = "Phase2"
restOfString = "There isn't any need for iterating over this mini-string."
Advertisement