# Java 正则表达式模式 ## Java正则表达式教程 - Java正则表达式模式 包\` java.util.regex \`包含三个类,以支持正则表达式的完整版本。 - 模式 - 匹配 - PatternSyntaxException \`Pattern \`保存正则表达式的编译形式。 \`Matcher \`将要匹配的字符串与模式相关联,并执行实际匹配。 \`PatternSyntaxException \`表示格式错误的正则表达式中的错误。 ## 编译正则表达式 没有公共构造函数的模式是不可变的,可以共享。 \`Pattern \`类包含一个静态compile()方法,它返回一个\` Pattern \`对象。 \`compile()\`方法是重载的。 \`\`\` static Pattern compile(String regex) static Pattern compile(String regex, int flags) \`\`\` 以下代码将正则表达式编译为Pattern对象: \`\`\` import java.util.regex.Pattern; public class Main { public static void main(String\[\] args) { // Prepare a regular expression String regex = "\[a-z\]@."; // Compile the regular expression into a Pattern object Pattern p = Pattern.compile(regex); } } \`\`\` compile()方法的第二个版本设置修改模式匹配方式的标志。 flags参数是一个位掩码,并在Pattern类中定义为int常量。 \| Flag \| 描述 \| \| :------------------------------- \| :----------------------------------------------------------- \| \| Pattern.CANON_EQ \| 启用规范等效。 \| \| Pattern.CASE_INSENSITIVE \| 启用不区分大小写的匹配。 \| \| Pattern.COMMENTS \| 启用不区分大小写的匹配。... \| \| Pattern.DOTALL \| 允许在模式中的空格和注释。 忽略以#开头的空格和嵌入的注释,直到行的结尾。 \| \| Pattern.LITERAL \| 启用模式的文字解析。 这个标志使元字符和转义序列作为正常字符。 \| \| Pattern.MULTILINE \| 启用多行模式。 默认情况下,\^和$匹配输入序列的开始和结束。 此标志使模式仅逐行匹配或输入序列的末尾。 \| \| Pattern.UNICODE_CASE \| 启用支持Unicode的大小写。 与CASE_INSENSITIVE标志一起,可以根据Unicode标准执行不区分大小写的匹配。 \| \| Pattern.UNICODE_ CHARACTER_CLASS \| 启用预定义字符类和POSIX字符类的Unicode版本。 设置此标志时,预定义字符类和POSIX字符类符合Unicode技术标准。 \| \| Pattern.UNIX_LINES \| 启用Unix行模式。 设置此标志时,只有\\ n字符被识别为行终止符。 \| ## 例子 以下代码编译设置CASE_INSENSTIVE和DOTALL标志的正则表达式。 \`\`\` import java.util.regex.Pattern; public class Main { public static void main(String\[\] args) { String regex = "\[a-z\]@."; Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE\|Pattern.DOTALL); } } \`\`\` ## 例2 \`\`\` import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args\[\]) { Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE); String candidateString = "Java. java JAVA jAVA"; Matcher matcher = p.matcher(candidateString); // display the latter match System.out.println(candidateString); matcher.find(11); System.out.println(matcher.group()); // display the earlier match System.out.println(candidateString); matcher.find(0); System.out.println(matcher.group()); } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/jimg/java_regular_expression/EXAMPLE_2__26765BFD7E5E8D066370.png)