一个匹配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>

 

增加

被匹配内容:<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条评论

  • JiaYu Blog 2022年04月26日在11:03 下午

    匹配新浪地址

    ^(https:\/\/weibo.com\/)+\d+\/
    (https:\/\/weibo.com+\/tv\/show\/\d*:\d*\?mid=)

  • 海南胡说 2022年04月29日在5:01 下午
  • 海南胡说 2022年06月3日在9:20 下午

    匹配单引号中的内容

    $str = ”;

    $isMatched = preg_match(‘/(?<=')[^"]*(?=')/', $str, $matches); var_dump($isMatched, $matches);

    Python – Python 正则表达式

    import re

    pattern = re.compile(ur'(?<=')[^"]*(?=')') str = u'' print(pattern.search(str))

    (?<=")[^"]*(?=") (?<=")(?:\\.|[^"\\])*(?=")

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注