Skip to content
everloot

Lore archive · Warcraft Wiki, 2023 dump

API strfind

Last wiki revision 2022-08-03

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]])

  • string: - The string to examine.
  • pattern: - 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: - 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: - Whether or not to disable regular expression matching. Defaults to false, so regex matching is usually enabled.
  • startPos: - The position of the first character of the first occurrence of the pattern.
  • endPos: - The position of the last character of the first occurrence of the pattern.

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."

Source

https://warcraft.wiki.gg/wiki/API_strfind · retrieved 2023-11-13 · CC BY-SA 4.0

Converted from wikitext with templates, tables and images removed, so some sentences may be missing values.

This archive predates WoW: Forever. For collected gameplay facts see the Forever database. Search the archive.