2021-04-18 11:21  阅读(132)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-regex-character-classes.html

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());
      }
    }
    

上面的代码生成以下结果。

202104181122_1.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 正则表达式模式
上一篇
Java 正则表达式元字符
下一篇
Java 正则表达式匹配