一个匹配IP所处位置的正则表达式

2022年03月29日

原创内容,转载请注明出处: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>

 


sicnature ---------------------------------------------------------------------
Your current IP address is: 34.231.247.88
Your IP address location: 美国弗吉尼亚阿什本 亚马逊云
Your IP address country and region: 美国 美国
Your current browser is:
Your current system is:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://www.myzhenai.com.cn/post/4069.html

2条评论

发表评论

您的电子邮箱地址不会被公开。