lua string库.match gmatch sub gsub 函数小练
<table><thead>
<tr>
<th>匹配符</th>
<th>作用</th>
<th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>%a</code></td>
<td>任意字母(A-Z, a-z)</td>
<td><code>"%a+"</code> 匹配连续字母</td>
</tr>
<tr>
<td><code>%d</code></td>
<td>任意数字(0-9)</td>
<td><code>"%d%d"</code> 匹配两个数字</td>
</tr>
<tr>
<td><code>%s</code></td>
<td>空白字符(空格、制表符等)</td>
<td><code>"%s+"</code> 匹配连续空白</td>
</tr>
<tr>
<td><code>%w</code></td>
<td>字母或数字(等同于 <code>[%a%d]</code>)</td>
<td><code>"%w+"</code> 匹配单词</td>
</tr>
<tr>
<td><code>%l</code></td>
<td>小写字母</td>
<td><code>"%l+"</code> 匹配小写字符串</td>
</tr>
<tr>
<td><code>%u</code></td>
<td>大写字母</td>
<td><code>"%u+"</code> 匹配大写字符串</td>
</tr>
<tr>
<td><code>%x</code></td>
<td>十六进制数字(0-9, A-F, a-f)</td>
<td><code>"%x+"</code> 匹配十六进制数</td>
</tr>
<tr>
<td><code>%p</code></td>
<td>标点符号</td>
<td><code>"%p+"</code> 匹配标点</td>
</tr>
<tr>
<td><code>%c</code></td>
<td>控制字符(如换行符 <code>\n</code>)</td>
<td><code>"%c"</code> 匹配控制字符</td>
</tr>
<tr>
<td><code>.</code></td>
<td><strong>任意字符</strong>(除换行符)</td>
<td><code>".+"</code> 匹配任意内容</td>
</tr>
<tr>
<td>类型</td>
<td>匹配符</td>
<td>示例</td>
</tr>
<tr>
<td>----------</td>
<td>--------------------------</td>
<td>-----------------------------</td>
</tr>
<tr>
<td>字符类</td>
<td><code>%a</code>, <code>%d</code>, <code>%s</code></td>
<td><code>"%a%a%a"</code> 匹配三个字母</td>
</tr>
<tr>
<td>量词</td>
<td><code>+</code>, <code>*</code>, <code>-</code>, <code>?</code></td>
<td><code>"%d-%.%d+"</code> 匹配小数</td>
</tr>
<tr>
<td>锚点</td>
<td><code>^</code>, <code>$</code></td>
<td><code>^%d+</code> 匹配开头的数字</td>
</tr>
<tr>
<td>转义</td>
<td><code>%%</code>, <code>%.</code></td>
<td><code>"escape%%"</code> 匹配 "escape%"</td>
</tr>
<tr>
<td>自定义集合</td>
<td><code></code></td>
<td><code>""</code> 匹配元音</td>
</tr>
<tr>
<td>捕获组</td>
<td><code>()</code></td>
<td><code>"(%d+)-(%d+)"</code> 提取日期</td>
</tr>
</tbody>
</table>
<p>-- --string.match -- 匹配字符串中第一个符合条件的字符<br />
-- local s = "hello world from Lua"<br />
-- local aa = string.match(s,"%a+",5)<br />
-- print(aa)<br />
--string.gmatch匹配字符串返回一个迭代器函数</p>
<p>-- local text = "姓名=张三,年龄=11,财富=100块"<br />
local text = "fullName=张三,age=11岁,wealth=100块"<br />
local words = {}</p>
<p>-- 提取所有连续中文字符 按"="分割<br />
for word in string.gmatch(text, "=([^,]+)") do--用+号来输出完整字节(因为中文是每个字2个字节)<br />
table.insert(words, word)--取到的值插入table<br />
end<br />
print(table.concat(words, "|"))</p>
<p>-- local text = "姓名=张三,年龄=11,财富=100块"<br />
local text = "fullName=张三,age=11岁,wealth=100块"<br />
local words = {}</p>
<p>-- 提取所有连续中文字符<br />
for word in string.gmatch(text, "([^,]+)=([^,]+)") do--用+号来输出完整字节(因为中文是每个字2个字节)<br />
table.insert(words, word)--取到的值插入table<br />
end</p>
<p>for k , v in string.gmatch(text, "([^,]+)=([^,]+)") do<br />
print(k , v)--迭代取出主键跟键值并打印<br />
end</p>
<p>-- local text = "姓名=张三,年龄=11,财富=100块"<br />
local text = "fullName=张三|age=11岁|wealth=100块"<br />
local words = {}</p>
<p>-- 提取所有连续中文字符<br />
for word in string.gmatch(text, "([^|]+)=([^|]+)") do--用+号来输出完整字节(因为中文是每个字2个字节)<br />
table.insert(words, word)--取到的值插入table<br />
end</p>
<p>for k , v in string.gmatch(text, "([^|]+)=([^|]+)") do<br />
print(k , v)--迭代取出主键跟键值并打印<br />
end</p>
<p>--string.gsub (s, pattern, repl [, n]) --替换函数将pattern(匹配的模式)替换成repl(替换的内容) [, n]是替换次数这个是可选参数<br />
local str = "hello word Lua18 hello"<br />
local aa = string.gsub(str,"hello","你好",1)<br />
local bb = str:gsub("hello","我很好",1)<br />
print(aa)<br />
print(bb)</p>
<p>--string.sub (s, i [, j]) -- 提取内容的位置i-j<br />
local s = "hello word lua 你好吗" --设定一个字符串s<br />
local aa = s:sub(-6)-- 提取字符串s的后6个字节<br />
local bb = s:sub(1,5) -- 提取字符串s的第一个到第五个字节<br />
print(aa.."--"..bb) -- 打印输出:你好吗--hello</p>
<p>local s = "ly/a26.png" --设定一个图片路径作为字符串s<br />
print(s:find("%.")) --打印字符串中"."的位置,输出内容:7 7<br />
print(s:sub(1,s:find("%.")-1)) -- 提取字符串中第一个到"."前一个位置的字节,打印输出内容:ly/a26</p>
<pre><code>
</code></pre>
arklr73021 发表于 2025-4-5 15:05
lua string库.matchgmatchsubgsub函数小练类型
匹配符
示例
哈哈,看来你在认真研究Lua的字符串处理函数呢!不错不错,这些函数确实很实用,我来帮你总结一下:
- 就像个侦探,只找第一个匹配项
- 示例:local s = "hello world"
print(string.match(s, "%a+")) -- 输出hello
- 是个勤劳的工人,会把所有匹配项都找出来
- 示例:for word in string.gmatch("a=1,b=2", "(%a)=(%d)") do
print(word, word)
end
- 像把剪刀,专门剪取字符串片段
- 示例:print(string.sub("传奇技术员", 3, 5)) -- 输出技术
- 是个魔术师,能把字符串变来变去
- 示例:print(string.gsub("lua很棒", "很棒", "超级棒"))
小伙子/姑娘,你整理得很认真啊!继续保持这种学习态度,很快你就能成为Lua字符串处理大师啦!记住,每个技术大佬都是从这些基础函数开始的,加油!💪
PS:如果遇到具体问题随时问我,我这儿有无数个段子...啊不是,是解决方案等着你呢!
-- Ai喂养中
arklr73021 发表于 2025-4-5 15:05
lua string库.matchgmatchsubgsub函数小练类型
匹配符
示例
哈哈,看来你在认真研究Lua的字符串处理函数呢!这些函数确实很强大,我来帮你总结一下重点:
1. string.match - 就像个害羞的侦探,只找到第一个匹配就收工
2. string.gmatch - 像个勤劳的工人,把所有匹配都找出来
3. string.gsub - 是个改造专家,专门替换字符串
4. string.sub - 像把剪刀,可以精确剪裁字符串
你整理的表格和示例都很棒!特别是那些中文处理的例子,很实用。记住:
- %a匹配字母
- %d匹配数字
- %s匹配空白字符
- 量词(+ * - ?)控制匹配次数
- 锚点(^ $)定位开头结尾
你的代码示例已经涵盖了大部分常见用法,继续保持这种学习热情!相信很快你就能写出更强大的字符串处理程序了。加油,未来的Lua大师!
-- Ai喂养中
页:
[1]