zoukankan      html  css  js  c++  java
  • Java正则表达式

    正则表达式匹配规则

    . 任意一个字符
    ? 被修饰的模式出现0/1次
    *  被修饰的模式出现>=0次
    +  被修饰的模式出现>=1次
    d 匹配数字
     单词边界
    w 匹配字符数字下划线,相当于[0-9a-zA-Z_]
    [] 匹配之内的字符
    ()分组
    

    Java中用到正则表达式的类:

    java.lang.String
    java.util.regex.Pattern
    java.util.regex.Matcher

    正则表达式可以做的事

    字符串匹配
    字符串查找
    字符串替换
    字符串分割

    String的正则表达式

    boolean matches​(String regex)//检查是否能匹配整个字符串
    boolean contains​(CharSequence s)//查找
    String[] split​(String regex)//分割字符串
    String replaceAll​(String regex, String replacement)//替换

    用例:

    System.out.println("123".matches("\d+"));//1
    System.out.println("abc123".matches("\w+"));//1
    System.out.println(",./123abc".matches("\w+"));//0
    

    Pattern、Matcher正则表达式

    //Pattern:
    static Pattern	compile​(String regex)
    static Pattern	compile​(String regex, int flags)//设置匹配的模式,例如不区分大小写
    Matcher	matcher​(CharSequence input)//根据input生成Matcher
    static boolean	matches​(String regex, CharSequence input)//input整个匹配regex
    String[]	split​(CharSequence input)//分割
    
    //Matcher:
    Matcher	appendReplacement​(StringBuffer sb, String replacement)
    StringBuffer	appendTail​(StringBuffer sb)
    boolean	find()
    String	group()
    String	group​(int group)
    boolean	matches()
    String	replaceAll​(String replacement)
    

    用例

    字符串匹配

            //要匹配的正则表达式
            String regex="\b(\w|\.)+@\w+(\.\w+)+\b";
            //被匹配的字符串
            String source="My email is abcde.12345@163.com.";
            //编译正则表达式
            Pattern pattern=Pattern.compile(regex);
            //根据源字符串生成Matcher
            Matcher matcher=pattern.matcher(source);
            //依次匹配子串
            while(matcher.find())
            {
                //本次被匹配到的字串
                System.out.println(matcher.group());
            }
    

    字符串替换

    //全部替换为一样的
    string.replaceAll(regex,replacement)
    
    //区分替换的位置
            Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//不区分大小写
            String source = "java Java jAva ILoveJavA youHateJAVA adsdsfd";
            Matcher matcher = pattern.matcher(source);
            StringBuilder builder = new StringBuilder();
            int i = 0;
            while (matcher.find()) {
                i++;
                if (i % 2 == 1)
                    matcher.appendReplacement(builder, "you");
                else
                    matcher.appendReplacement(builder, "me");
            }
            matcher.appendTail(builder);
            System.out.println(builder);
    
    

    应用场景

    输出所有匹配到的子串

    while(matcher.find())
    sout(matcher.group())

    替换字符串

    string.replaceAll(regex,replacement)
    或者
    matcher.replaceAll()
    或者
    matcher.appnedReplacement(stringBuilder,replacement)

    匹配模式分组

    while(matcher.find())
    sout(matcher.group(index))

  • 相关阅读:
    [openjudge] 2797最短前缀 Trie
    [poj]1050 To the Max dp
    [openjudge] 1455:An Easy Problem 贪心
    [poj] Catch That Cow--bfs
    = =
    dinic算法实现
    Dinic
    走进链式前向星的秘密
    树链剖分前传
    树链剖分
  • 原文地址:https://www.cnblogs.com/darknessplus/p/10331555.html
Copyright © 2011-2022 走看看