正则中的且与非

a且b

匹配行的开始: ^

正向先行断言: ?=

表示匹配行的结束: $

模式修饰符(表示单行模式DOTALL模式,它将使点号.匹配包括换行符在内的所有字符): (?s)

校验一段文本中同时存在ab(java不包括换行): ^(?=.*a)(?=.*b).*$

校验一段文本中同时存在ab(java包括换行): ^(?s)(?=.*a)(?=.*b).*$

import java.util.regex.*;

public class Main {
    public static void main(String[] args) {
        String text = "This is a sample\nstring with\na and b";
        //  Pattern.DOTALL 标志来指示正则表达式引擎将点号 . 匹配所有字符,包括换行符
        Pattern pattern = Pattern.compile("^(?=.*a)(?=.*b).*$", Pattern.DOTALL);
        // 如果不通过Pattern.DOTALL,则正则为: ^(?s)(?=.*a)(?=.*b).*$
        Matcher matcher = pattern.matcher(text);
        
        if (matcher.find()) {
            System.out.println("文本中同时存在 'a' 和 'b'");
        } else {
            System.out.println("文本中不存在 'a' 和 'b'");
        }
    }
}

非a且非b

负向前瞻断言: (?!pattern)

在正则表达式中表示不匹配某个模式,其中pattern是你想要取反匹配的部分

既不包含a也不包含b-非(a|b)

?!a|b

来源

  1. runoob.com-正则表达式 - 元字符