【学渣】字符匹配之有限状态自动机--应用在爬虫程序中匹配网址
来源:互联网 发布:win10软件消失 编辑:程序博客网 时间:2024/06/05 09:24
关于自动机的原理的文章已经有很多了,我就不再多说了,我觉得很多博客都写的很好
我就写一下在网址匹配方面的应用吧
其实很多人大都会选择正则表达式
如果是有规律的匹配,应该有一个状态转移函数,但是我没有为下图找到规律,所以就用了最蠢的方法
如果是连续的输入,比如abababcrfjg这样的模式,然后输入的主字符串也是连续的 就可以写出来一个看起来不蠢的函数
随便打开一个网页,看看它的源代码
你会发现 链接大多是 <a href="//www.baidu.com/more/"这样的
然后根据上面的图
我们可以写出来一个矩阵,或者叫表
state<>ahref="/ 其他01000000000001002000000000220232222222232022422222224202225222222 这样的表格然后就可以写程序了
#include<stdio.h>#include<string.h>void main(){int state=0;char url[102400];printf("input url:\n");gets(url);//scanf("%s",url);printf("input successfully,url is :\n%s\n",url);int len_url=strlen(url);printf("lenth is :%d\n",len_url);int flag=0;for(int i=0;i<=len_url;i++){//printf("for***[%d]**state=%d****url[%d]=%c\n",i,state,i,url[i]);if(state==0){if(url[i]=='<'){state=1;continue;}else {state=0;flag=i;continue;}}if(state==1){if(url[i]=='a'){state=2;continue;}else {state=0;flag=i;continue;}}if(state==2){if(url[i]=='h'){state=3;continue;} if(url[i]=='>'){state=0;flag=i;continue;}else{state=2;continue;}}if(state==3){if(url[i]=='r'){state=4;continue;} if(url[i]=='>'){state=0;flag=i;continue;} else{state=2;continue;}}if(state==4){if(url[i]=='e'){state=5;continue;}if(url[i]=='>'){state=0;flag=i;continue;}else{state=2;continue;}}if(state==5){if(url[i]=='f'){state=6;continue;}if(url[i]=='>'){state=0;flag=i;continue;}else{state=2;continue;}}if(state==6){if(url[i]=='='){state=7;continue;}if(url[i]=='>'){state=0;flag=i;continue;}else{state=2;continue;}}if(state==7){if(url[i]=='"'){state=10;continue;}if(url[i]==' '){state=7;continue;}else{state=0;flag=i;continue;}}if(state==10){if(url[i]=='/'){state=8;continue;}if(url[i]=='"'||url[i]=='>'||url[i]=='#'){state=0;flag=i;continue;}else{state=10;continue;}}if(state==8){if(url[i]=='>'){state=0;flag=i;continue;}if(url[i]=='"') { state=9; for(int j=flag;j<=i;j++) {printf("%c",url[j+1]);}printf("\n\n"); continue; }if(url[i]!='>'&&url[i]!='"'&&state==8){state=8;continue;}}if(state==9){state=0;continue;}else continue;}}
0 0
- 【学渣】字符匹配之有限状态自动机--应用在爬虫程序中匹配网址
- 字符串匹配算法之:有限状态自动机
- 字符串匹配之有限自动机
- 字符串匹配之有限自动机&kmp算法
- 有限自动机字符串匹配_KMP算法计算状态转换表
- 字符串匹配的FA(有限状态自动机)算法
- 字符串匹配(string matching)算法之二:利用有限自动机
- 字符串匹配(string matching)算法之二:利用有限自动机
- 算法——字符串匹配之有限自动机算法
- Java实现算法导论中有限自动机字符串匹配算法
- 有限状态自动机的应用
- 算法 之 有限状态自动机
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 【算法】利用有限自动机进行字符串匹配
- 利用有限自动机进行字符串匹配
- 字符串匹配——有限自动机
- 利用有限自动机进行字符串匹配
- java类集整理及例子
- 【转】jquery获取兄弟节点的方式
- POJ 1840
- linux抓包tcpdump--Solaris抓包snoop
- 数据库操作--查询(续)
- 【学渣】字符匹配之有限状态自动机--应用在爬虫程序中匹配网址
- 1014. 福尔摩斯的约会 (20)
- 在tabBarController模式下怎么对UIViewController刷新
- android Sqlite使用
- IOS6.0以后APP对内存警告的处理
- 为ListView每个Item上面的按钮添加事件
- u-boot-2014.10移植第21天----添加nand flash命令支持(三)
- 小白acm-ASCII码排序
- win7 64位下编译convnet