鍍金池/ 問答/Java  Linux  HTML/ 正則表達(dá)式中 ?=.*? 的疑惑

正則表達(dá)式中 ?=.*? 的疑惑

請教一個(gè)正則表達(dá)式的問題, 如下代碼所示, 我是用的java使用正則表達(dá)式;

    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("我已經(jīng)執(zhí)行過了");
        
    }

問題1: 上面的代碼為什么不能匹配@,沒打印出@
我的嘗試: 改為 Pattern p=Pattern.compile("[#?!@$%^&*-])");,就可以正常匹配了.

問題2: 請問?=.*?的含義是什么, 我理解的含義是"任何字符開頭的"

問題3: 請問這個(gè)正則表達(dá)式 能包含所有特殊字符嗎, 我現(xiàn)在的需求是檢查中字符中的特殊字符

回答
編輯回答
尐懶貓

(?=)只是匹配一個(gè)位置

2017年8月20日 18:33
編輯回答
孤影

使用圓括號時(shí)會把匹配的內(nèi)容緩存,加上?=就不會被緩存,平時(shí)不太能用上,這個(gè)叫非捕獲元字符,.*?這個(gè)就是0個(gè)或多個(gè)任意字符啦;

2017年9月28日 18:15