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 文件]