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