限定符和定位符

186 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第33天,点击查看活动详情

元字符-限定符

用于指定其前面的字符和组合项连续出现多少次

符号含义示例说明匹配输入
*指定字符重复0次或者n次(无要求)(abc)*仅包含任意个abc的字符串,等效于\w*abc、abcabcabc
+指定字符重复1次或者n次(至少一次)m+(abc)*以至少1个m开头,后接任意个abc的字符m、mabc
指定字符重复0次或1次(最多一次)m+abc?以至少1个m开头,后接ab或abc的字符串mab、mabc、mmabc
{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串abc、bcd、adb
{n,}指定至少n个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串abc、aaabbbccc
{n,m}指定至少n个但不多于m个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串abc、abcd、aabcd

演示限定符的使用

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp05 {
    public static void main(String[] args) {
        String content = "a211111aaaaaahello";
        //a{3},1{4},\\d{2}
        //String regStr = "a{3}";// 表示匹配 aaa
        //String regStr = "1{4}";// 表示匹配 1111
        //String regStr = "\\d{2}";// 表示匹配 两位的任意数字字符
        //a{3,4},1{4,5},\\d{2,5}
        
        //细节:java 匹配默认贪婪匹配,即尽可能匹配多的
        //String regStr = "a{3,4}"; //表示匹配 aaa 或者 aaaa
        //String regStr = "1{4,5}"; //表示匹配 1111 或者 11111
        //String regStr = "\\d{2,5}"; //匹配 2 位数或者 3,4,5
        
        //1+
        //String regStr = "1+"; //匹配一个 1 或者多个 1
        //String regStr = "\\d+"; //匹配一个数字或者多个数字
        
        //1*
        //String regStr = "1*"; //匹配 0 个 1 或者多个 1
        //演示?的使用, 遵守贪婪匹配
        String regStr = "a1?"; //匹配 a 或者 a1
        Pattern pattern = Pattern.compile(regStr/*, Pattern.CASE_INSENSITIVE*/);
        Matcher matcher = pattern.matcher(content);
        
        while (matcher.find()) {
            System.out.println("找到 " + matcher.group(0));
        }
    }
}

元字符-定位符

定位符, 规定要匹配的字符串出现的位置,比如在字符串的开始还是在结束的位置

符号含义示例说明匹配输入
^指定起始字符^[0-9]+[a-z]*以至于1个数字开头,后接任意个小写字母的字符串1abc、123abc
$指定结束字符^[0-9]\-[a-z]+$以1个数字开头后连接字符“-”,并以至少1个小写字母结尾的字符串1-a
\b匹配目标字符串的边界zhou\b这里说的字符串的边界指的是子串间有空格,或者是目标字符串的位置结束abzhou、cczhou
\B匹配目标字符串的非边界zhou\B和\b的含义相反zhouxiaomo

演示定位符的使用

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp06 {
    public static void main(String[] args) {
        String content = "hanshunping sphan nnhan";
        //String content = "123-abc";
        
        //以至少 1 个数字开头,后接任意个小写字母的字符串
        //String regStr = "^[0-9]+[a-z]*";
        
        //以至少 1 个数字开头, 必须以至少一个小写字母结束
        //String regStr = "^[0-9]+\\-[a-z]+$";
        
        //表示匹配边界的 han[这里的边界是指:被匹配的字符串最后, // 也可以是空格的子字符串的后面]
        //String regStr = "han\\b";
        
        //和\\b 的含义刚刚相反
        String regStr = "han\\B";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        
        while (matcher.find()) {
            System.out.println("找到=" + matcher.group(0));
        }
    }
}