正则表达式区别:贪婪模式 vs 字符组匹配

问题:

以下两段正则表达式有什么区别?

String regex1 = '.*/push/(.*?)$';
String regex2 = '.*/push/([^/]+)$';

解析:

  • regex1: 使用 .*? 表示非贪婪模式,即在匹配到第一个 '/push/' 后,尽可能少地匹配字符,直到遇到结尾 '$'。
  • regex2: 使用 [^/]+ 表示字符组,匹配除了斜杠 '/' 之外的任意字符,匹配到结尾 '$'。

示例:

String url = ' https://artifacts.ctcdn.cn:9943/server/proxy/api/v1/artifacts/push/test.txt---_____+++/\';

使用 regex2 解析这段 URL,无法匹配到内容是因为它没有考虑到斜杠的情况。

解决方案:

regex2 修改为以下内容,可以匹配包括斜杠的任意字符:

String regex2 = '.*/push/([^/]+/?)*$';

修改后的 regex2 匹配除了斜杠之外的任意字符,以及可能出现的斜杠,直到结尾 '$'。

总结:

  • 非贪婪模式 .*? 尽可能少地匹配字符,而字符组 [^/]+ 匹配除了指定字符之外的任意字符。
  • 需要匹配包括斜杠的任意字符时,可以使用 ([^/]+/?)* 这种正则表达式。
正则表达式区别:贪婪模式 vs 字符组匹配

原文地址: https://www.cveoy.top/t/topic/okXs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录