2012-04-28 109 views
1

我有一个脚本提供了一些IP地址的信息。如何从文本中提取某些内容?

我想从文本中提取国家。

在下面的文本国行是"Country: US"

我想显示:US

的文字是:

[Querying whois.arin.net] 
[whois.arin.net] 
# 
# Query terms are ambiguous. The query is assumed to be: 
#  "n 173.194.74.100" 
# 
# Use "?" to get help. 
# 

# 
# The following results may also be obtained via: 
# http://whois.arin.net/rest/nets;q=173.194.74.100?showDetails=true&showARIN=false&ext=netref2 
# 

NetRange:  173.194.0.0 - 173.194.255.255 
CIDR:   173.194.0.0/16 
OriginAS:  AS15169 
NetName:  GOOGLE 
NetHandle:  NET-173-194-0-0-1 
Parent:   NET-173-0-0-0-0 
NetType:  Direct Allocation 
RegDate:  2009-08-17 
Updated:  2012-02-24 
Ref:   http://whois.arin.net/rest/net/NET-173-194-0-0-1 


OrgName:  Google Inc. 
OrgId:   GOGL 
Address:  1600 Amphitheatre Parkway 
City:   Mountain View 
StateProv:  CA 
PostalCode:  94043 
Country:  US 
RegDate:  2000-03-30 
Updated:  2011-09-24 
Ref:   http://whois.arin.net/rest/org/GOGL 

OrgTechHandle: ZG39-ARIN 
OrgTechName: Google Inc 
OrgTechPhone: +1-650-253-0000 
OrgTechEmail: [email protected] 
OrgTechRef: http://whois.arin.net/rest/poc/ZG39-ARIN 

OrgAbuseHandle: ZG39-ARIN 
OrgAbuseName: Google Inc 
OrgAbusePhone: +1-650-253-0000 
OrgAbuseEmail: [email protected] 
OrgAbuseRef: http://whois.arin.net/rest/poc/ZG39-ARIN 

# 
# ARIN WHOIS data and services are subject to the Terms of Use 
# available at: https://www.arin.net/whois_tou.html 
# 
+0

我试图使用分离器阵列字符串分割“:”,然后使用的foreach - >然后strpos – semsem 2012-04-28 12:57:20

+0

我想用得到的IP地址的国家exec('whois $ ip'),而不是从提供IP地址的网站获取它的IP地址 – semsem 2012-04-28 12:58:35

+0

分割为“\ n”字符,然后foreach - >拆分“:” – 2012-04-28 12:59:29

回答

2

如果它只是你需要的正则表达式 - 试试这个 - 国家id将在第一组

Country:\s*([A-Z]{2}) 
  • Country: - 匹配文字
  • \s* - 匹配任意数量的空格,制表符等
  • ([A-Z]{2}) - 匹配和捕捉任何字母(大写)两次

使用preg_match_all如果你需要这一切发生模式

+0

我试过你的代码,但是得到这个ip的结果只有 但是当试试另一个ip时它得到空的结果 – semsem 2012-04-28 13:14:03

+1

@semsem - 你是什么意思?你尝试过preg_match_all吗? http://php.net/manual/en/function.preg-match-all.php – 2012-04-28 13:17:00

+0

@semsem - 是另一个与此不同的例子吗? – 2012-04-28 13:25:44

2

随着你的preg_match可以这样做:

if (preg_match('/^Country:\s*([A-Z]{2,3)$/m', $str, $match)) { 
    echo $match[1]; 
} 
+0

它给了我只在这个ip的结果,但如果我尝试另一个它不匹配的国家 – semsem 2012-04-28 13:16:55

+1

你可以发布国家:...谁的答案plz(或IP)的一部分? – smrtl 2012-04-28 13:19:11

+0

我通过添加修饰符/ i来解决问题: 谢谢你的帮助 – semsem 2012-04-28 13:43:07

1

有一个phpwhois库用于处理whois数据。它会以数组的形式得到响应。

+0

谢谢你提供这个库 我会试试看 – semsem 2012-04-28 13:44:22

0

提取物的preg_match

preg_match("/Country:(.*)\"/siU", $str, $match); 
echo trim($match[1]); 
0
$regex = "/country:[\ \t\r\n\f][A-Z]+\s/"; 

$txt = "descr: NCC#200X44704917 
country: FR 
admin-c: ACPSA223-RIPE 
tech-c: TCWQQP8-RIPE"; 

preg_match($regex, $txt, $result); 

print_r($result); 

--------------------------------- ---
阵列([0] =>国家:FR)