模式常量 | 修饰符 | 核心功能 |
---|---|---|
DOTALL | (?s) | 允许.匹配换行符 |
MULTILINE | (?m) | 分行匹配首尾 |
CASE_INSENSITIVE | (?i) | 忽略大小写 |
在处理多行文本时,DOTALL模式可激活点号的全匹配特性。当启用Pattern.DOTALL后,表达式中的.字符将包含换行符在内的所有字符。例如:
Pattern p = Pattern.compile(".*", Pattern.DOTALL);Matcher m = p.matcher("play\nscala");System.out.println(m.matches()); // 返回true
当文本包含多行内容时,MULTILINE模式可改变^和$的匹配行为。该模式下,锚点符将分别匹配每行的开始和结束位置:
Pattern p = Pattern.compile("^.*$", Pattern.MULTILINE);Matcher m = p.matcher("play\nscala");while(m.find()) { System.out.println("匹配段:" + m.group());}// 输出: 匹配段:play// 匹配段:scala
UNIX_LINES模式专门处理不同系统的换行差异,该模式仅识别\n作为换行标志。当处理Windows系统生成的\r\n换行符时:
Pattern p = Pattern.compile("^.*$", Pattern.UNIX_LINES | Pattern.MULTILINE);Matcher m = p.matcher("play\r\nscala");while(m.find()) { System.out.println("长度:" + m.group().length());}// 输出两个长度为5的结果,包含\r字符
启用CASE_INSENSITIVE模式后,匹配过程将忽略字母大小写差异:
Pattern p = Pattern.compile("^S.*A$", Pattern.CASE_INSENSITIVE);Matcher m = p.matcher("scala");System.out.println(m.matches()); // 返回true
在需要兼容JavaScript等环境时,可采用[\s\S]组合模式实现跨行匹配:
Pattern p = Pattern.compile("[\\s\\S]*");