CCF认证 201803-3URL映射(正则表达式的使用)

本文探讨了如何使用正则表达式进行URL重写,通过一系列示例展示了正则表达式的强大功能,包括如何匹配特定的URL模式并将其重写为新的路径。文章详细解释了每个正则表达式的含义,以及如何在实际项目中应用这些规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CCFè®¤è¯ 201803-3URLæ å°é¢ç®æè¿°

#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<pair<regex,string> >ve={{regex("<int>"),"([0-9]+)"},
			       {regex("<str>"),"([^/]+)"},
			       {regex("<path>"),"(.+)"}};
vector<pair<regex,string> >rules;
int main(){
    scanf("%d%d",&n,&m);
    string p,r;
    for(int i=1;i<=n;i++){
        cin>>p>>r;
	for(auto j:ve){
	    p=regex_replace(p,j.first,j.second);
	}
	    rules.push_back({regex(p),r});
	}
	string s;
	smatch result;
	for(int i=1;i<=m;i++){
	    cin>>s;
	    int id=0;
	    for(auto j:rules){
		if(regex_match(s,result,j.first)){
		    id=1;
		    cout<<j.second;
		    for(int k=1;k<=result.size();k++){
			int flag=0;
			string s=result[k];
			for(int h=0;h<s.length();h++){
			    if(!s[h]){
				flag=1;
				break;
			    }
			}
			if(!flag){
			    while(s[0]=='0'){
			    s.erase(0,1);
			    }
			}
			cout<<" "<<s;
		    }
		cout<<endl;
		break;
	    }
        }
	if(!id) cout<<"404"<<endl;
    }
    return 0;
}
/*
5 5
/articles/2003/ special_case_2003
/articles/<int>/ year_archive
/articles/<int>/<int>/ month_archive
/articles/<int>/<int>/<str>/ article_detail
/static/<path> static_serve
/articles/2004/
/articles/1985/09/aloha/
/articles/hello/
/static/js/jquery.js
/articles/10/25/0aaa/
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值