分享一个正则表达式的面试问题

前段时间有小同事出去面试,微信发了我一个笔试题,需要给出结果,大概如下:

test = "userInfo";

reg = "([a-z])([A-Z])";

System.out.println(test.replaceAll(reg, "$1_$2").toLowerCase());

小同事大概觉得是应该输出user_info,但是又不确定,我回复他输出结果确实是这个。

我问了两个身边的同事,结果犹犹豫豫给不出答案,唉,所谓的高级工程师,竟然搞不懂正则分组捕获,反向引用。

在正则里,使用()可以捕获到匹配的组,分组按匹配结果按序号排列,分组1,分组2。。。。。

后面的$1,$2表示引用刚才匹配到的分组。

显然题中的正则表达式是匹配一个小写字母紧邻一个大写字母,并将原字符串的匹配项替换为以

下划线连接,最后全部转换为小写。

最后使用分组捕获我们可以轻松将手机号脱敏处理,请读者自行思考一下吧。

原创文章 17 获赞 13 访问量 7621

猜你喜欢

转载自blog.csdn.net/weixin_43275277/article/details/90201806