1.string.match 模式匹配
string.match(str, pattern, pos)
第一个参数指定目标字符串,每二个参数指定查找模式串。第三个参数可选指定开始位置
这个函数与string.find很象。但不会返回匹配的开始位置与结束位置。而仅仅是返回找到的字符串。
如果在模式串中用圆括号指定的匹配分组,则返回值有多个分别对应各个匹配分组的捕获结果。
分组可以相互嵌套,捕获结果返回的顺序对应模式串中匹配分组的左圆括号出现的前后顺序。
如果你希望第一个返回值是匹配结果的完整字符串,那么请将整个模式串包含在一对圆括号内。
var v,v2 = string.match("abcd", "(ab)(cd)");
io.print(v,v2); //>显示v等于"ab" v2等于"cd"
如果不显示的用括号指定捕获,函数将捕获整个匹配模式。
//\d表示数字 \d+表示最长匹配多个数字
var v = string.match("abcd1234", "\d+");
io.print(v); //>显示v等于"1234"
2.string.gmatch 全局模式匹配
func = string.gmatch(str, pattern)
string.gmatch()创建并返回一个迭代器,可用于for语句中迭代的进行全局查找。
迭代器每执行一次返回一个找到的字符串,如果在模式串中用圆括号指定的匹配分组,
则返回值有多个分别对应各个匹配分组的捕获结果。分组可以相互嵌套,捕获结果返
的顺序对应模式串中匹配分组的左圆括号出现的前后顺序。如果你希望第一个返回值
是匹配结果的完整字符串,那么请将整个模式串包含在一对圆括号内。
strHtmlCode = http.get("http://www.aardio.com")
string.gmatch 全局查找子串,每个括号指定的一个分组匹配(对应一个分组捕获,在泛型for中增加一个返回值)
与 string.match 不同,string.gmatch发现一个完整匹配以后,会继续向后查找,
pattern = //\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*
for href in string.gmatch(strHtmlCode, pattern) {
我们解释一下模式串 "\s*href\s*=\s*\"?\'?([:\w\./@]+)\"?\'?\s*"
\是转义符
\s表示空白字符
\s*表示空白字符出现一次或多次
\"表示引号
( \转义符的使用与普通字符串相同 )
?表示出现一次或零次
\w表示字母和数字
\.表示.(因为.是特殊字符,所以需要\还原)
[]是一个自定义的字符类,如[0-9]匹配所有数字
+是修饰符表示前面的字符出现一次或多次