正则表达式的基本用法

 常用的元字符

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d

匹配数字

大写为取反,^也为取反,(如:\D为除数字以外任意字符,[^5]为非5的字符)

 量词

{n}表达式重复n次(如:表达式 \d{6} 为匹配6个数字)
{m,n}表达式至少重复m次,最多重复n次
{m,}表达式至少重复m次
?表达式0次或者1次
+表达式至少出现了1次,相当与{1,}
*表达式出现任意次,相当于{0,}

 字符边界

\b匹配单词的开始或结束。(如:表达式 \b123\b 为匹配123左右边的字符不是\w
^匹配字符串的开始,如果指定了多行模式,则需要使用 \A
$匹配字符串的结束,如果指定了多行模式,则需要使用 \Z

选择符和分组

|
()

(1)、在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰

(2)、每一对括号会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本,用 \1 来获取(1为编号)。(如:表达式(/w/w)\1 的含义为,/w/w匹配出的字符假设为go、to、ls……,那么\1的位置就代表go、to、ls……,整个表达式匹配的结果就为gogo、toto、lsls……)。

(?:Expression)非捕获组一些表达式中,不得不使用(),但又不需要保存()中表达式匹配的内容,这时可以用非捕获组来抵消使用()带来的副作用。

预搜索(零宽断言)

(?=exp)断言自身出现的位置的后面能匹配表达式exp
(?<=exp)…………………………前面能匹配表达式exp
(?!exp)…………………………后面不能匹配表达式exp
(?<!exp)…………………………前面不匹配表达式exp

如:[a-z]{0,}匹配出的字符,后面加上(?=ing)就会找出后缀为ing的字符

        (?<=sw)ing匹配出的为sw开头的ing

练习:

匹配邮箱:[\w\-]+表示匹配任意数量的字母、数字、下划线、-@匹配@[a-z0-9A-Z]+表示匹配任意数量的字母、数字\.[A-Za-z]{2,4}匹配 .后2~4为字母(\.[A-Za-z]{2,4}){1,2}匹配括号内的表达式1~2次

 在Java中的运用:


    public static void fun1(){
        //在这个字符串:asfsdsalkj123154564,是否符合指定的正则表达式:\w+

        //表达式对象
        Pattern p =Pattern.compile("\\w+");

        //创建Matcher对象
        Matcher m = p.matcher("asfsdsalkj123154564");

        boolean yesOrno = m.matches();

        System.out.println(yesOrno);

    }
    public static void fun2(){
        //表达式对象
        Pattern p =Pattern.compile("\\w+");

        //创建Matcher对象
        Matcher m = p.matcher("asfsdsalk&&j123154564");

        System.out.println(m.find());
        System.out.println(m.group());//第一个子字符串 asfsdsalk

        System.out.println(m.find());
        System.out.println(m.group());//第二个子字符串 j123154564

        System.out.println(m.find());
//        System.out.println(m.group());//第三个子字符串,这里没找到
    }

    public static void fun3(){
        //表达式对象
        Pattern p =Pattern.compile("([a-z]+)([0-9]+)");

        //创建Matcher对象
        Matcher m = p.matcher("aa322**sdk333$#sds234");

        while (m.find()){
            System.out.println(m.group()); //group(),group(0)匹配整个表达式的子字符串,第一次为aa332
            System.out.println(m.group(1));//按照([a-z]+)匹配,第一次为aa
            System.out.println(m.group(2));//按照([0-9]+)匹配,第一次为322
        }
    }
    public static void fun4(){
        //表达式对象
        Pattern p =Pattern.compile("[0-9]");

        //创建Matcher对象
        Matcher m = p.matcher("aa322**sdk333$#sds234");

        //将匹配到的字符都替换成#,生成新的字符串
        String newStr = m.replaceAll("#");
        System.out.println(newStr);
    }
    public static void fun5(){
        String str = "a121321b3234c44";
        String[] split = str.split("\\d+");
        System.out.println(Arrays.toString(split));
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值