Kotlin初学者求助:如何从文本及脚本中提取IP地址
Kotlin提取文本中IP地址的正确方法
你的原代码问题在于用[a-z]正则拆分字符串,只会把小写字母作为分隔符,拆分后得到的内容包含空字符串、换行符和IP的混合结果,无法直接得到纯净的IP地址。正确的做法是用正则表达式匹配IP格式的内容,而不是拆分。
实现代码
val string = """ hello 192.168.0.1 test 192.168.0.22 kotlin 192.168.0.115 """ // 严格匹配0-255范围的IP正则表达式 val ipRegex = Regex("""\b(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b""") // 提取所有匹配的IP地址 val ipAddresses = ipRegex.findAll(string) .map { it.value } .toList() // 逐个输出IP ipAddresses.forEach { println(it) }
代码说明
- 正则表达式:这段正则会严格匹配IP地址的格式,确保每段数字在0-255之间,避免提取类似
999.999.999.999这种非法内容。 - findAll方法:
Regex的findAll方法会遍历整个字符串,返回所有符合正则规则的匹配结果。 - 提取结果:通过
map { it.value }提取每个匹配项的字符串内容,转成List后可以直接遍历输出或后续处理。
Kotlin脚本中使用
如果是写Kotlin脚本(.kts文件),直接复制上述代码即可运行,不需要包裹类或main函数,执行脚本就能得到输出:
192.168.0.1 192.168.0.22 192.168.0.115
内容的提问来源于stack exchange,提问作者مريم برير
相关产品推荐
相关产品推荐

