/*
本地程序实现了对两种格式链接的处理
两种格式分别是【注意】 <a href和<img src的链接格式一定要正确,格式如下
<a href="........">.......</a>
<img src="........"></img>
程序通过正则表达式将文中的本地连接A找到,然后进行字符串拼接 CONST_DEFAULT_DOWNLOADFILEPATH + "/" + A,将拼接好的字符串再替换到原来的位置,如下
(1) <a href="./accumulation/工作难题记录/程序界面无法拖拽到4K副屏问题.md">程序界面无法拖拽到4K副屏问题.md</a>
(2) <img src="./pic/shell脚本语法-1.png"></img>
替换成
(1) <a href="/data/data/org.qtproject.example.client/download/程序界面无法拖拽到4K副屏问题.md">程序界面无法拖拽到4K副屏问题.md</a>
(2) <img src="/data/data/org.qtproject.example.client/download/shell脚本语法-1.png"></img>
程序还需要进行另一个拼接,将A和gitlab服务器仓库地址拼接,并存储到容器中,以备后续下载使用,效果如下
(1) <a href="./accumulation/工作难题记录/程序界面无法拖拽到4K副屏问题.md">程序界面无法拖拽到4K副屏问题.md</a>
(2) <img src="./pic/shell脚本语法-1.png"></img>
拼接后
(1) http://43.xxx.39.50:8099/lzq/learnmyself/-/blob/main/Linux/linux-shell脚本/shell脚本积累/dos2unix.sh
(2) http://43.xxx.39.50:8099/lzq/learnmyself/-/blob/main/pic/shell脚本语法-1.png
*/
#include <iostream>
#include <string>
#include <regex>
#include <iterator>
#include <vector>
//gitlab服务器http链接的固定部分
//通过拼接固定部分和笔记中相对路径,可以得到仓库文件的完成网络链接
const std::string CONST_DEFAULT_HTTPHEADER = "http://43.xxx.39.50:8099/lzq/learnmyself/-/blob/main";
int main ()
{
//这是要处理的文本内容
std::string str_src ("<a href=\"./Linux/linux-shell脚本/shell脚本积累/dos2unix.sh\">dos2unix.sh脚本兼容windows和linux的修改</a> <img src=\"./pic/shell脚本语法-1.png\"></img> \n");
std::cout<<"【原始数据】"<<str_src<<std::endl;
std::cout<<"处理<img src链接"<<std::endl;
{
/*
<img src="./pic/shell脚本语法-1.png"></img>
匹配结果
捕获组0 <img src="./pic/shell脚本语法-1.png"></img>
捕获组1 .
捕获组2 /pic
捕获组3 /shell脚本语法-1.png
*/
std::regex reg_pic ("<img src=\"(\\.)(\\/.+)(\\/.+\\..+)\"></img>");
//备份数据以备后续使用
std::string str_src_temp1 = str_src;
std::string str_src_temp2 = str_src;
std::smatch match_pic_res;
std::vector<std::string> storagepichttp;
while(regex_search(str_src_temp1, match_pic_res, reg_pic))
{
if(match_pic_res.ready())
{
std::string temp = CONST_DEFAULT_HTTPHEADER +std::string(match_pic_res[2]) + std::string(match_pic_res[3]);
storagepichttp.push_back(temp);
std::cout<<"【拼接出的gitlab http链接】"<<temp<<std::endl;
str_src_temp1 = match_pic_res.suffix().str(); //suffix 意为后缀,就是返回匹配字符串之后其他的字符串
}
}
//处理<img src链接 替换手机设备路径 在安卓上下载路径只能在应用程序包名对应的目录下,这里设置下载的路径在根目录下载的download目录
const std::string CONST_DEFAULT_DOWNLOADFILEPATH = "<img src=\"/data/data/org.qtproject.example.client/download";
std::string replace_str = CONST_DEFAULT_DOWNLOADFILEPATH + "$3\"></img>";
std::cout <<"【替换结果】"<< regex_replace(str_src_temp2,reg_pic,replace_str)<<std::endl;
}
std::cout<<"处理<a href 链接"<<std::endl;
{
/*
<a href="./accumulation/工作难题记录/程序界面无法拖拽到4K副屏问题.md">程序界面无法拖拽到4K副屏问题111.md</a>
匹配结果
捕获组0 <a href="./accumulation/工作难题记录/程序界面无法拖拽到4K副屏问题.md">程序界面无法拖拽到4K副屏问题111.md</a>
捕获组1 .
捕获组2 /accumulation/工作难题记录
捕获组3 程序界面无法拖拽到4K副屏问题.md
捕获组4 程序界面无法拖拽到4K副屏问题111.md
*/
std::regex reg_text ("<a href=\"(\\.)(\\/.+)(\\/.+\\..+)\">(.+)<\\/a>");
//备份数据以备后续使用
std::string str_src_temp1 = str_src;
std::string str_src_temp2 = str_src;
std::smatch match_text_res;
std::vector<std::string> storagetexthttp;
while(regex_search(str_src_temp1, match_text_res, reg_text))
{
if(match_text_res.ready())
{
std::string temp = CONST_DEFAULT_HTTPHEADER +std::string(match_text_res[2]) + std::string(match_text_res[3]);
storagetexthttp.push_back(temp);
std::cout<<"【拼接出的gitlab http链接】"<<temp<<std::endl;
str_src_temp1 = match_text_res.suffix().str(); //suffix 意为后缀,就是返回匹配字符串之后其他的字符串
}
}
//处理<a href 替换手机设备路径 在安卓上下载路径只能在应用程序包名对应的目录下,这里设置下载的路径在根目录下载的download目录
const std::string CONST_DEFAULT_DOWNLOADFILEPATH = "<a href=\"/data/data/org.qtproject.example.client/download";
//$3 和 $4是表示引用捕获组3和捕获组4的内容
std::string replace_str = CONST_DEFAULT_DOWNLOADFILEPATH + "$3\">$4</a>";
std::cout <<"【替换结果】"<< regex_replace(str_src_temp2,reg_text,replace_str)<<std::endl;
}
return 0;
}
/*
执行结果:
【原始数据】<a href="./Linux/linux-shell脚本/shell脚本积累/dos2unix.sh">dos2unix.sh脚本兼容windows和linux的修改</a> <img src="./pic/shell脚本语法-1.png"></img>
处理<img src链接
【拼接出的gitlab http链接】http://43.xxx.39.50:8099/lzq/learnmyself/-/blob/main/pic/shell脚本语法-1.png
【替换结果】<a href="./Linux/linux-shell脚本/shell脚本积累/dos2unix.sh">dos2unix.sh脚本兼容windows和linux的修改</a> <img src="/data/data/org.qtproject.example.client/download/shell脚本语法-1.png"></img>
处理<a href 链接
【拼接出的gitlab http链接】http://43.xxx.39.50:8099/lzq/learnmyself/-/blob/main/Linux/linux-shell脚本/shell脚本积累/dos2unix.sh
【替换结果】<a href="/data/data/org.qtproject.example.client/download/dos2unix.sh">dos2unix.sh脚本兼容windows和linux的修改</a> <img src="./pic/shell脚本语法-1.png"></img>
*/
代码 : 使用c++11正则表达式进行正则查找和正则替换
于 2023-10-25 09:21:29 首次发布