正则表达式中?:的作用
在正则表达式中使用括号()
会在匹配时创建相应的group, 例如日期匹配regex:
/^(\d{4})[-/](\d{2})[-/](\d{2})$/
括号包裹的三个部分会生成3个group,如下图
可以用$1, $2和 $3获取各group,如:
String str = "2021/04/24";
String regex = "^(\d{4})[-/](\d{2})[-/](\d{2})$";
str.replaceAll(regex,"$1年$2月$3日");
替换后str结果为2021年04月24日
此时若用(?:)
替换括号,该部分变为non-capturing group,不生成可获取的group
String str = "2021/04/24";
String regex = "^(?:\d{4})[-/](\d{2})[-/](\d{2})$";
str.replaceAll(regex,"$1月$2日");
str结果为04月24日