Java正则表达式提取目标UUID失败,求正确匹配规则
解决提取指定UUID的正则问题
给定目标字符串:
networks[0]/site[9785d8e8-9b1f-3fc0-8271-6e32f58fb725]/equipment/location[144ae20e-be33-32e2-8b52-798e968e88b9]
需要提取site后的UUID:9785d8e8-9b1f-3fc0-8271-6e32f58fb725。
原正则问题分析
你写的.*\/([^\/]+)\[.*\]$之所以返回location,是因为.*是贪婪匹配,会直接匹配到字符串最后一个/,此时捕获组([^\/]+)对应的就是最后一个/和[之间的location,完全偏离了目标。
正确的正则表达式
以下几种正则都可以实现需求,按场景选择:
- 精准定位site后的内容(推荐,最直接)
site\[([^\]]+)\]
- 逻辑:
site\[匹配固定前缀site[,([^\]]+)捕获所有]之前的字符(即目标UUID),\]匹配闭合的]。匹配后取第一个捕获组的内容即可。
- 全字符串匹配
.*site\[([^\]]+)\].*
- 逻辑:用
.*匹配site前后的任意内容,核心还是捕获site[]内部的UUID,同样取第一个捕获组结果。
- 严格匹配UUID格式(避免误抓非UUID内容)
site\[([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\]
- 逻辑:针对UUID的8-4-4-4-12十六进制字符格式做精确匹配,只有符合UUID规则的内容才会被捕获,安全性更高。
内容的提问来源于stack exchange,提问作者gan7202
相关产品推荐
相关产品推荐

