求一个正则表达式匹配四种情况
http://nt.eepw.com.cn/showtopic-4.aspx
http://nt.eepw.com.cn/showtopic-4-2.aspx#24
http://nt.eepw.com.cn/showtopic.aspx?page=end&topicid=4#24(注,end指尾页,也是一种写法)
http://nt.eepw.com.cn/showtopic.aspx?page=2&topicid=4#24
大家可以看到下面四中网址形式都是bbs的帖子页面,但是网址有所不同
网址如下
http://nt.eepw.com.cn/showtopic-4.aspx
http://nt.eepw.com.cn/showtopic-4-2.aspx#24
http://nt.eepw.com.cn/showtopic.aspx?page=end&topicid=4#24(注,end指尾页,也是一种写法)
http://nt.eepw.com.cn/showtopic.aspx?page=2&topicid=4#24
我要求不管网址采取那种方式,我都可以将他的网址的分页部分找到,并修改。
并都修改成这种形式http://nt.eepw.com.cn/showtopic-帖子编号-第几页.aspx
也就是说随便给你上面的四种网址,能帮我替换成我要求的网址
注:忽略#后面的字符
比如
http://nt.eepw.com.cn/showtopic-4.aspx
应该改成
http://nt.eepw.com.cn/showtopic-4-1.aspx(因为是第一页)
另外:还能进行替换
比如把
http://nt.eepw.com.cn/showtopic-4-1.aspx
替换成
http://nt.eepw.com.cn/showtopic-4-7.aspx(也就是变成第七页)
也就是写
funtion goPagenum(pagenum)
{
把当前的网址中的页码替换成另一个页码的,然后进行跳转
}
------解决方案--------------------一个正则应该很难实现,分别用四个正则匹配到帖子编号和页号,然后再转向
------解决方案--------------------try
http://nt\.eepw\.com.cn/showtopic(-(? <topicid> \d+))?(-(? <page> \d+))?(\.aspx\?page=(? <page> \d+|end)&topicid=(? <topicid> \d+))?
所给例子四种网址中,捕获组topicid和page匹配结果分别为
4,
4,2
4,end
4,2
一个正则可以匹配,但是第一页和end需要在替换之前判断一下,其余页可以直接替换
------解决方案--------------------http://nt\.eepw\.com\.cn/((showtopic-(? <topicid> \d+)(-(? <page> \d+))?.aspx)|(showtopic.aspx\?(&?page=(? <page> \w+)|&?topicid=(? <topicid> \d+)){2}))
http://nt.eepw.com.cn/showtopic-4.aspx
topicid=4, page=
http://nt.eepw.com.cn/showtopic-4-2.aspx#24
topicid=4, page=2
http://nt.eepw.com.cn/showtopic.aspx?page=end&topicid=4#24
topicid=4, page=end
http://nt.eepw.com.cn/showtopic.aspx?page=2&topicid=4#24
topicid=4, page=2
http://nt.eepw.com.cn/showtopic.aspx?topicid=4&page=2#24
topicid=4, page=2