正则表达式区别:贪婪模式 vs 字符组匹配
正则表达式区别:贪婪模式 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 匹配除了斜杠之外的任意字符,以及可能出现的斜杠,直到结尾 '$'。
总结:
- 非贪婪模式
.*?尽可能少地匹配字符,而字符组[^/]+匹配除了指定字符之外的任意字符。 - 需要匹配包括斜杠的任意字符时,可以使用
([^/]+/?)*这种正则表达式。
原文地址: https://www.cveoy.top/t/topic/okXs 著作权归作者所有。请勿转载和采集!