【Java/Regexp】让正则表达式去看目标字符串里是否有不允许出现的字符串

正则表达式常用来制作模式,然后看字符串是否符合这个模式,殊不知正则也可以进行不该出现的字符串的匹配,请看程序:

package test;

public class RegNotIn {
    public static void main(String[] args) {
        String[] arr= {"刘备宋江","宋江ZGL李逵",
                       "张飞李逵","吴用宋江",
                       "张飞李逵","zGl林冲宋江",
                       "张飞李逵","吴用宋江杨志"};
        
        for(String text:arr) {
            if(nofoundBanName(text)) {
                System.out.println(text);
            }
        }
    }
    
    private static boolean nofoundBanName(String text) {
        return text.matches("^(?i)(((?!(刘备|关羽|张飞|zgl)).)+)$");
    }
}

输出:

吴用宋江
吴用宋江杨志

正则式分析:

^...$ :这个是目标字符串从头找到尾,毋庸多言。

(?i)   :这个是不区分大小写

(?!(刘备|关羽|张飞|zgl)). :点号匹配任意字符,?!是朝前看不允许有,(刘备|关羽|张飞|zgl) 是刘备、关羽、张飞、zgl里四选一,组合起来就是,任意字符前不允许有刘备、关羽、张飞、zgl中的一个

((?!(刘备|关羽|张飞|zgl)).)+ :表示 “任意字符前不允许有刘备、关羽、张飞、zgl中的一个 ”这个模式可以重复一到多次。

 

END

 

posted @ 2021-12-22 20:17  逆火狂飙  阅读(712)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东