如何从字符串java中提取IP:PORT

时间:2011-11-20 20:00:20

标签: java regex text-extraction

我有一个文本文件,并通过这样的文件循环:

for ( int i = 0; i < this.textLines.size(); i++ ) {
    String tempString = textLines.get( i );

所以我现在tempString包含类似的内容:

46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02

我想要的是返回IP:PORT部分,在这种情况下:46.102.241.199:3128

我该怎么做?

2 个答案:

答案 0 :(得分:7)

这个正则表达式会为你提供一个带有可选端口的IP。如果总是有一个端口删除该行末尾的问号。

\d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})?

请注意,这是对IPv4的简化验证,只会匹配它们是正确的格式而不是有效的格式。并记住添加一个额外的反斜杠来逃避java中的每个反斜杠。

这是java中的一个例子:

String text = "46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02";
String pattern = "\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";

Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(text);
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

46.102.241.199:3128

答案 1 :(得分:2)

我认为你不需要正则表达式,这可以通过StringTokenizer实现。

import java.util.ArrayList;
import java.util.StringTokenizer;

public class SOScrap{
public static void main(String[] args) {
    ArrayList<String> as = new ArrayList<String>();
    ArrayList<String> asa = new ArrayList<String>();
    String s = "46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02";
    StringTokenizer st = new StringTokenizer(s, " ");
        while(st.hasMoreTokens()){
              as.add(st.nextToken());
        }

    StringTokenizer astk = new StringTokenizer(as.get(0), ":");

        while(astk.hasMoreTokens()){
           asa.add(astk.nextToken());
        }
    System.out.println(asa);
}

}

输出

[46.102.241.199, 3128]

您现在可以访问ArrayList中的元素。第一个索引保存IP,而第二个保存端口。