正则表达式元字符

基本介绍

如果想要灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:

  1. 特殊字符
  2. 限定符
  3. 选择匹配符
  4. 字符匹配符
  5. 定位符

特殊自负,元字符转义号 \

\符号说明:在使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错。在java的正则表达式中,两个\代表其他语言中的一个\

package com.ftn.regexp;

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

//演示转义字符的使用
public class Regexp_02 {
    public static void main(String[] args) {
        String content = "abd(dnn..sd(d..nna(";
        String regStr = "\\.";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println("找到:" + matcher.group(0));
        }
    }
}

元字符——限定符

1. *:指定字符重复0次或n次(可以为0次)
2. +:指定字符重复1次或n次(最少1次)
3. ?:指定字符重复0次或1次(最多1次)
4. {n}:只能匹配n个字符
5. {n,}:指定至少匹配n个字符
6. {n,m}:指定匹配长度范围为n-m
package com.ftn.regexp;

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

//演示限定符
public class Regexp_05 {
    public static void main(String[] args) {
        String content = "shaaaa124383145_  ..#@djFSFnsfds";
        String regStr = "a{3}";     //表示匹配 aaa
        String regStr1 = "\\d{2}";     //表示匹配两位任意数字

        //JAVA默认贪婪匹配,尽可能匹配多的
        String regStr2 = "a{3,4}";     //表示匹配 aaa或者aaaa
        String regStr3 = "\\d{2,5}";     //表示匹配任意2个或3、4、5个数字
        String regStr4 = "\\d{2,}";     //表示匹配长度大于两位的任意数字


        String regStr5 = "a+";     //表示匹配一个 a或者多个a
        String regStr6 = "1*";     //表示匹配0个1或者多个1
        String regStr7 = "a1?";     //表示匹配 a 或者 a1

        Pattern pattern = Pattern.compile(regStr7);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println(matcher.group(0));
        }
    }
}

元字符——选择匹配符

在匹配某个字符串的时候是选择性的,即既可以匹配这个,又可以匹配那个,需要用到选择匹配符号"|",匹配“|”之前的或之后的表达式

package com.ftn.regexp;

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

//演示选择匹配符
public class Regexp_04 {
    public static void main(String[] args) {
        String content = "sha1145_  ..#@djFSFnsfds";
        String regStr = "\\d|s|fd";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println(matcher.group(0));
        }
    }
}

元字符——字符匹配符

1. [ ]  :可接收的字符列表
2. [^]  :不接收的字符列表
3. -  :连字符
4. .  :匹配除\n之外的任何字符
5. \\d:匹配单个数字字符,相当于[0-9]
6. \\D:匹配单个非数字字符
7. \\w:匹配单个数字、大小写字母字符、下划线,相当于[0-9a-zA-Z_]
8. \\W:匹配非单个数字、大小写字母字符、下划线

请添加图片描述
请添加图片描述

package com.ftn.regexp;

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

//演示字符匹配符的使用
public class Regexp_03 {
    public static void main(String[] args) {

        String content = "sg4@45b ufua_Bc   453F..SDGGGS21hbh..b155fhjdsbf";
        String regStr = "[a-z]";    //匹配 a-z 之间任意一个字符
        String regStr1 = "[A-Z]";    //匹配 A-Z 之间任意一个字符
        String regStr2 = "abc";    //匹配 abc 字符串【默认区分大小写】
        String regStr3 = "(?i)abc";    //匹配 abc 字符串【不区分大小写】
        String regStr4 = "a(?i)bc";    //匹配 abc 字符串【bc不区分大小写】
        String regStr5 = "a((?i)b)c";    //匹配 abc 字符串【b不区分大小写】
        String regStr6 = "[0-9]";    //匹配 0-9 之间任意一个字符
        String regStr7 = "[^a-z]";    //匹配不是 a-z 之间任意一个字符
        String regStr8 = "[abcd]";    //匹配在 abcd 之间任意一个字符
        String regStr9 = "\\D";    //匹配不在 0-9 之间任意一个字符
        String regStr10 = "\\d";    //匹配在 0-9 之间任意一个字符
        String regStr11 = "\\W";    //匹配非字母、数字、下划线,相当于[^a-zA-Z0-9_]
        String regStr12 = "\\w";    //匹配字母、数字、下划线,相当于[a-zA-Z0-9_]
        String regStr13 = "\\S";    //匹配任何非空白字符
        String regStr14 = "\\s";    //匹配任何空白字符(空格,制表符等)
        String regStr15 = ".";    //匹配除 \n 之外的所有字符。如果要匹配 . 本身,则需要使用转义字符\\
        String regStr16 = "\\.";    //匹配 . 本身

        //当创建 Pattern对象时,指定 Pattern.CASE_INSENSITIVE,表示匹配不区分大小写
        Pattern pattern = Pattern.compile(regStr16/*,Pattern.CASE_INSENSITIVE*/);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println("找到:" + matcher.group(0));
        }
    }
}

元字符——定位符

定位符,规定要匹配的字符串出现的位置,比如在字符串的开始位置还是结束位置
1. ^:指定起始字符
2. $:指定结束字符
3. \b:匹配目标字符串的边界(边界指子串间有空格,或目标字符串的结束位置)
4. \B:匹配目标字符串的非边界

package com.ftn.regexp;

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

//演示定位符的使用
public class Regexp_06 {
    public static void main(String[] args) {
        String content = "13a#cxa addc sfa";

        //以至少一个数字开头,后接任意个小写字母的字符串
        String regStr = "^[0-9]+[a-z]*";    //^:指定起始符
        //以至少一个数字开头加上至少一个小写字母结尾的字符串
        String regStr2 = "^[0-9]+[a-z]+$";    //$:指定结束字符
        //以至少一个数字开头加上"-"再加上至少一个小写字母结尾的字符串
        String regStr3 = "^[0-9]+\\-[a-z]+$";    //$:指定结束字符

        // \\b:匹配边界的字符
        String regStr4 = "a\\b";    //边界:指子串间有空格,或目标字符串的结束位置
        // \\B:匹非边界的字符
        String regStr5 = "a\\B";    //边界:指子串间有空格,或目标字符串的结束位置

        Pattern pattern = Pattern.compile(regStr5);
        Matcher matcher = pattern.matcher(content);

        while (matcher.find()){
            System.out.println(matcher.group(0));
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值