c++ string字符串的查找替换模式匹配
from
一、查找字符串的位置
i,j = (str,"要查找的字符串"[,pos[, plain]]);
使用模式匹配查找字符串并返回起始位置(i),结束位置(j);
第三个参数pos指定搜索开始的位置,这个参数可以省略(使用默认值1);
第四个参数指定是否禁用模式匹配,默认为false;
如果查找失败,i,:
i,j = ("abcd" ,"cd");if(i and j)then
("在 'abcd' 中找到 'cd' ,从"..i.."到"..j);
end;if(not ("abcd" ,"不可能") )then
("没有从 'abcd' 中找到 '不可能' ");
end;
有时候我们可能不需要模式匹配,虽然他很好用。例如下面的代码
i,j = ("abc%d" ,"cd%d");-- 结果是找不到
我们要找的是%d,但是模式匹配认为%d是一个数字,所以我们要再加一个%取消转义
i,j = ("abc%d" ,"cd%%d");--终于找到了%d
我们可以写一个函数来自动的为所有标点添加%转义符取消转义
function (s)
--%p匹配所有的标点,在前面加上%转义符取消转义成为普通的标记。
--%%%1 其中%%表示%,%1表示查找模式中的第一个括号匹配的查找结果。
return (s, "(%p)", "%%%1");
end;i,j = ("abc%d" ,("cd%d") );--终于找到了
一个更好更快的方法,。
i,j = ("abc%d" ,"cd%d",1,true);-- 终于找到了%d
,后面我们还会介绍更加强大的 以及 函数
二、替换字符串
str = (str, pattern, repl [, n])参数分别为(目标字符串,查找模式字符串,替换字符串,替换次数)。
最后一个可选参数指定替换的次数,如果不指定则替换所有的找到的字符串。
--在模式匹配中 .圆点标记匹配任意字符。str = ("abcd",".","k");
(str);-->结果是kkkkstr = ("abcd",".","k",1);
(str);-->结果是kbcdpattern参数(查找模式字符串)可以使用所有模式匹配语法。
repl参数则为普通字符串,但是可以用%1,%2,%3..........等匹配模式匹配中的捕获(即一个括号中匹配的查找结果);
看下面的示例: --在模式匹配中 .圆点标记匹配任意字符。str = ("abcd","(.)","%1k");
(str);-->结果是akbkckdk
二、模式匹配-语法
首先我们有必要解释一下什么是模式匹配。
模式匹配类似正则表达式,但更加简洁高效,更加易于学习、分析字符串的速度更快。
模式匹配:用特定的模式语法组成的模式串查找匹配有规则的字符串。
模式串:根据模式语法编写的字符串,用来要找匹配有规则的目标字符串。
模式语法--字符类
. 任意字符
%a 字母
%c 控制字符
%d 数字
%l 小写字母
%p 标点字符
%s 空白符
%u 大写字母
%w 字母和数字
%x 十六进制数字
%z /0 字节码为0的字符,对于普通文本表示文本结束上面字符类的大写形式表示小写所代表的集合的补集%A 不是字母的字符
%C 不是控制字符的字符
%D 不是数字的字符
%L 不是小写字母的字符
%P 不是标点的字符
%S 不是空白符的字符
%U 不是大写字母的字符
%W 不是字母和数字的字符
%X 不是十六进制数字的字符
%Z 不是/0的字符上面字符类
c++ string字符串的查找替换模式匹配 来自淘豆网m.daumloan.com转载请标明出处.