正则中的且与非
a且b
匹配行的开始: ^
正向先行断言: ?=
表示匹配行的结束: $
模式修饰符(表示单行模式
或DOTALL
模式,它将使点号.
匹配包括换行符在内的所有字符): (?s)
校验一段文本中同时存在a
与b
(java
不包括换行): ^(?=.*a)(?=.*b).*$
校验一段文本中同时存在a
与b
(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