为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式中 ?=.*? 的疑惑

正则表达式中 ?=.*? 的疑惑

桃花长相依 2019-03-21 18:15:10
请教一个正则表达式的问题, 如下代码所示, 我是用的java使用正则表达式;    public static void test(){        Pattern p=Pattern.compile("(?=.*?[#?!@$%^&*-])");        Matcher m=p.matcher("我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com");        while(m.find()) {            System.out.println(m.group());        }        System.out.print("我已经执行过了");            }问题1: 上面的代码为什么不能匹配@,没打印出@我的尝试: 改为 Pattern p=Pattern.compile("[#?!@$%^&*-])");,就可以正常匹配了.问题2: 请问?=.*?的含义是什么, 我理解的含义是"任何字符开头的"问题3: 请问这个正则表达式 能包含所有特殊字符吗, 我现在的需求是检查中字符中的特殊字符
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

(?=)只是匹配一个位置


查看完整回答
反对 回复 2019-04-03
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

使用圆括号时会把匹配的内容缓存,加上?=就不会被缓存,平时不太能用上,这个叫非捕获元字符,.*?这个就是0个或多个任意字符啦;


查看完整回答
反对 回复 2019-04-03
  • 2 回答
  • 0 关注
  • 412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信