一个Java regex模式 "java或duke "在一个Java字符串上匹配:
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.regex.Pattern;
import org.junit.jupiter.api.Test;
public class RegexTest {
@Test
public void singleLine(){
var pattern = Pattern.compile(".*(java|duke).*");
var text = "java duke";
assertTrue(pattern.matcher(text).matches());
}
...但在多行Java字符串/文本块上失败:
@Test
public void multiLine() {
var pattern = Pattern.compile(".*(java|duke).*");
var message = """
java
duke
""";
assertFalse(pattern.matcher(message).matches());
}
选项 [Pattern.DOTALL](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#DOTALL)
(...) 在dotall模式下,表达式.匹配任何字符,包括行结束符。默认情况下,该表达式不匹配行结束符(...)。
使正则表达式适用于多行字符串:
@Test
public void multiLineDotAll() {
var pattern = Pattern.compile(".*(java|duke).*",Pattern.DOTALL);
var message = """
java
duke
""";
assertTrue(pattern.matcher(message).matches());
}