Java正则分组无法重复?如何编写UNC路径格式校验正则?
UNC路径正则校验修改方案
问题分析
原正则存在两个核心问题:
- 末尾冗余的
.+(?<!\\)$片段逻辑错误:(\\{1}\w+)+匹配完路径分段后,.+要求额外匹配至少1个字符,导致仅含两段的合法路径(如用例7的\\server\m)无法匹配.+为贪婪匹配任意字符,会吞掉路径中间的连续反斜杠,导致用例3的双反斜杠错误无法被检出
最终正则
^\\\\[^\\]+(?:\\[^\\]+)+$
规则说明
^匹配字符串开头\\\\匹配UNC路径要求的开头双反斜杠前缀[^\\]+匹配服务器名称,支持任意非反斜杠字符(符合不校验具体名称规则的要求)(?:\\[^\\]+)+非捕获组,匹配「单个反斜杠+路径分段」的结构,至少出现1次,保证路径至少有「服务器+共享目录」两层结构$匹配字符串结尾
用例验证
所有测试用例均符合预期:
- 匹配成功:
\\server\multiple\folders\example\path、\\server\m、\\server\m\w\z - 匹配失败:
\\server\\multiple\folders\example\path、\\server\multiple\\folders\example\path、\\server\multiplefolders\example\path\、\\server、\\\server\multiple
内容的提问来源于stack exchange,提问作者Raul Marquez
相关产品推荐
相关产品推荐

