首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析IP:端口#后面带有字符的字符串端口

解析IP:端口#后面带有字符的字符串端口
EN

Stack Overflow用户
提问于 2014-07-05 06:33:39
回答 3查看 2.9K关注 0票数 3

在这个问题上,我需要一点帮助,而我的RegEx知识也有点缺乏。

我有一个代理列表,我试图解析并将IP和端口号从字符串中分离出来。

正在读取的字符串如下(示例1)

代码语言:javascript
复制
121.121.121.121:8081    2.103384    Китай   high    05-07-2014 09:25:17

有时看起来像(例2)

代码语言:javascript
复制
222.222.222.222:8081

当我使用这个代码的时候。

代码语言:javascript
复制
preg_match_all('@[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}\.@',$ip,$results);
$output = (preg_split('/:/',$results));
$ip = $output['0'];
$port = $output['1'];

如果只有一个IP:Китай端口,比如例2,但是在例1中,它也能抓住所有通过空间的东西,所以端口号看起来就像"8081 2.103384高05-07-2014 09:25:17“。

有没有一个正则表达式模式,我可以让它停止在一个空间,如果它看到的一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-05 06:43:37

通过分割,您只匹配您不想要的;在这种情况下,您可能希望有一个匹配。

在您的情况下,下列匹配表达式应该可以工作:

代码语言:javascript
复制
if (preg_match('/^(\d[\d.]+):(\d+)\b/', $proxy, $matches)) {
    $ip = $matches[1];
    $port = $matches[2];
}
票数 4
EN

Stack Overflow用户

发布于 2014-07-05 06:38:09

这个正则表达式会匹配ip地址和端口号,

代码语言:javascript
复制
\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{1,5}\b

演示

这样你就可以很容易地把它分开。

你可以使用preg_match函数,

代码语言:javascript
复制
<?php
$str = '121.121.121.121:8081    2.103384    Китай   high    05-07-2014 09:25:17';
if (preg_match('~\b([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):([0-9]{1,5}\b)~', $str, $matches)) {
    $ip = $matches[1];
    $port = $matches[2];
}
echo "$ip\n";
echo "$port\n";
?>

输出:

代码语言:javascript
复制
121.121.121.121
8081
票数 1
EN

Stack Overflow用户

发布于 2014-07-05 06:44:17

由于不需要在此级别验证IP地址,因此有一种更短的匹配方法:

代码语言:javascript
复制
(\d+(?(?!:)\.)){4}:\d+

现场演示

代码语言:javascript
复制
preg_match_all('@(\d+(?(?!:)\.)){4}:\d+@', $ip, $results);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24583711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档