java正则表达式匹配IP地址和端口号作为捕获的组

Posted

技术标签:

【中文标题】java正则表达式匹配IP地址和端口号作为捕获的组【英文标题】:java regex matching ip address and port number as captured groups 【发布时间】:2011-02-23 22:09:42 【问题描述】:

请有人告诉我这个正则表达式有什么问题吗?

((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.)3(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\\:([0-9]2,5)

匹配这个:assfasfas>192.168.1.1:8080192.168.222.43:8286

我需要 192.168.1.1 和 8080 才能被捕获组

谢谢

【问题讨论】:

【参考方案1】:

除非你真的,真的必须做IP地址验证,我建议你简化正则表达式,因为这个野兽太复杂了,不能只匹配“IP部分”和“端口部分”。我的建议是

(\d1,3\.\d1,3\.\d1,3\.\d1,3):(\d1,5)

第 1 组和第 2 组将分别保存 IP 和端口。以上内容已经变得更加复杂,恕我直言,即使是这样简单的事情也足够了:

(\d+\.\d+\.\d+\.\d+):(\d+)

请注意,双反斜杠是 Java 字符串的要求,而不是正则表达式的要求,所以我把它们省略了。

【讨论】:

但是编译器说:无效的转义序列(有效的是 \b \t \n \f \r \" \' \\ ) 因为我把它声明为String,对不起 正如我所说,Java 字符串需要转义反斜杠。因此,正则表达式中的 \d 将是 Java 字符串中的 \\d

以上是关于java正则表达式匹配IP地址和端口号作为捕获的组的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式进阶

C# - 正则表达式匹配模式、替换和捕获行号 [来自 Txt 文件]

Java 正则表达式之捕获组

Java网络编程:IP地址和端口号

如何查找 SQLSERVER 2008 的 IP 地址和端口号以从 java 连接数据库 [关闭]

正则表达式中 如何取出所有组中的值?