原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/4069.html
因为之前我添加到博客里显示浏览用户IP所在地址的功能是POST一个IP平台的,原本我使用的方法很笨,就是GET网页源码,然后从源码中分析到IP所在的位置地址,但我是使用分割文本并逐步搜索的方法,这个方法很容易受网页源码的变动而产生问题。
今天,也许是后台代码在获取IP所在位置地址的时候出错,我整个文章页面排版全乱了,通过右键源文件一看,后台代理获取到了一段HTML标签,那肯定是查找文本字符窜的代码出错了。
通过分析IP平台的网页源文件,发现显示IP所在位置地址的标签是固定的,分别是<em>***</em>和<dd>***</dd>这两块,但是dd标签网页源码里有很多个,但全部都可以通过正则表达式匹配出来。
我对正则表达式不是太精通,所以我先是自己写了一些,后面一个匹配的比较模糊,所以就又在hostloc社区上请教,在一个zxxx大佬的帮助下,用他写的正则表达式解决了问题,在这里也把这些正则表达式发出来以便以后有朋友需要而参考。
我写的几段正则表达式
<[a-z]+>+(\S+.*?)</[a-z]+> <em>+(\S+.*?)</em> <em>+(.*?)</em> <em>+(.*?)</em> <dd>(.*?)</dd> <dd>(.*?)<a
网友们写的正则表达式
<em>.*</em> <em>.+?</em> <em>(.*?)<\/em> <em>([\s\S]*?)<\/em> <em>(.|\n|\r\n)*?<\/em>
使用成功的正则表达式
<\s*em\s*>(.*?)<\s*\/\s*em\s*>[^<]
PHP源代码
<html> <head> <body> <?php /** 这是获取当前用户IP所在位置 */ function get_ip_address($ip="") { $chip = "http://ip.com/"; /* 指定站长工具获取IP地址的页面地址,后边加上IP就可以了 */ if ( $ip == "" ){ $ip = $_SERVER["REMOTE_ADDR"]; /* 获取当前浏览用户地址,显示的是纯ip地址格式 */ } $str = file_get_contents($chip.$ip); /* 获取网页源码,变量 $str 即是当前IP地址的网页源码 */ if ($str !== ""){ $isMatched = preg_match('/<\s*em\s*>(.*?)<\s*\/\s*em\s*>[^<]/', $str, $matches); $i = str_replace("</em>","",text_capture($matches[0],"<em>","<\/em>")); return $i; } } ?> <?php echo get_ip_address(); ?> </body> </head> </html>
增加
被匹配内容:<em id="infoLocation">中国海南海口美兰 电信</em> 匹配内容:\<em\ id=\"(.+)\">.*<\/em\>
被匹配内容:<dd>中国海南海口美兰 电信<a href="http://tool.chinaz.com/contact" target="_blank" class="col-blue02 pl5">(纠错)</a></dd> 匹配内容:<dd>.*<a\shref=
sicnature ---------------------------------------------------------------------
I P 地 址: 18.219.81.129
区 域 位 置: 美国俄亥俄
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://myzhenai.com.cn/post/4069.html
3条评论
匹配新浪地址
^(https:\/\/weibo.com\/)+\d+\/
(https:\/\/weibo.com+\/tv\/show\/\d*:\d*\?mid=)
搜狐的一个接口
https://pv.sohu.com/cityjson?ie=utf-8
匹配单引号中的内容