微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式初步

正则表达式初步

预定义字符类

一个预定义字符只能匹配一个字符,如果想要让一个预定义字符匹配多个字符,必须要使用数量词。

表示 含义 实例 结果
\\d [0-9的数字] System.out.println("数字字符"+"1".matches("\\d")) true
. 任意字符 System.out.println("任意字符"+"a".matches(".")) true
\\D 非数字字符 System.out.priintln("非数字字符"+"a".matches("\\D")) true
\\s 空白字符 回车\r、换行\n、\t等都属于空白字符
\\S 非空白字符 除空白字符以外的字符
\\w 单词字符,包括[a-z][A-Z][_][0-9] `System.out.println(“单词字符”+”@”.matches(“\w”))’ false
\\W 非单词字符 `System.out.println(“单词字符”+”@”.matches(“\w”))’ true

数量

在第一部分中已经说明了数量词的作用,下面来说明数量词的使用方法

数量 含义 实例 实例含义
表示一次或者一次也没有 \\d? 表示数字出现一次或者一次都不出现
* 表示零次或者多次 \\d* 数字出现0次或者多次
+ 至少出现一次 \\d+ 数字至少出现一次,一次都不出现时是false
{n} 恰好出现n次 \\d{5} 数字恰好出现5次
{n,} 至少要出现指定的n次 \\d{3,} 数字至少要出现3次
{n,m} 至少n次,但是不超过m次 \\d{3,5} 数字至少出现3次,但是不超过5次

范围词

范围词中不管你写多少个字符,没有数量词的配合,也只能匹配一个字符。

范围词 含义 实例 实例含义
[abc] abc中的一个 [abcd] a,b,c,d中的一个
[^abc] 除了a、b、c之外的字符 [^abcd] 除了abcd之外的字符
[a-zA-Z#]|字符可以使a-z之间的任意字符包含和# [a-z0-9] 任意小写字符或者数字都可以

操作字符串实例

正则表达式主要是用于操作字符串的规则,正则表达式对字符串的操作主要包含以下的集中应用:

  • 匹配

  • 切割

  • 替换

  • 查找

匹配

匹配使用String中的matches方法
需求1:编写一个正则表达式匹配一个手机号,手机号的规则包含:

  1. 第一位是1开头;
  2. 第二位可以是3、4、5、7、8,
  3. 长度是11位。
public Demo{
    public static void main(String[] args){
        String telPhone = "15338607191";
        System.out.println(telPhone.matches("1[34578]\\d{9}"?"合法手机号":"非法的手机号"));
    }
}

需求2:匹配固定电话号码,首先需要分析清楚规则,区号+主机号 区号:首位是0,长度3-4位 主机号:首位不能是0,长度是7-8位。

public Demo{
    public static void main(String[] args){
        String telPhone = "0353-8869125";
        System.out.println(telPhone.matches(telPhone.matches("0\\d{2,3}-[1-9]\\d{6,7}")?合法固话:非法固话);
    }
}
切割

切割只要使用的是java.lang.String中的split方法,从方法的原型中可以看出,split方法可以接收一个正则表达书作为形式参数。
需求:根据重叠词进行切割

class Demo{
    public static void main(String[] args){

    }
    public static void testSplit(){
        String str = "大家家家明天天玩得得得得得得得开心";
        str.split("(.)\\1+"); //如果正则表达式的内容需要被复用,那么需要对正则表达式的内容进行分组,分组的目的就是为了提高正则表达式的复用性,组号不能指定,组号认是从1开始。
    }
}

解释上面正则的含义:

替换

替换用的是java.lang.String中的replaceAll方法,该方法的参数是一个正则表达式。
需求:将“我我我要要要要做做做项项项项项项项项项项目”替换成“我要做项目”

class Demo{
public static void main(String[] args){
    replacetest();
}
public static void replaceTest(){
    String str = "我我我要要要要做做做项项项项项项项项项项目"; 
    str = str.replaceAll("(.)\\1+","$1");//如果需要在replaceAll方法正则表达式的外部引用组的内容,那么需要使用的是"$组号"便可实现。
    System.out.println(str);
}
查找

查找不能使用java.lang.String中的方法解决,只能使用正则对象来实现,其中要用到两个:Pattern(正则对象)、Matcher(匹配器对象)。在 Matcher对象呗创建之后,所有关于正则表达式是否成功的匹配,以及匹配之后的所有结果都保存在Matcher中,此时我们需要使用Matcher类中的方法来查找到底有什么内容在这个类中经常用的方法有两个:find()、group(),其中find方法是确定是否匹配了正则表达式的内容,而group()方法则是将匹配的内容正确的输出在使用group方法的时候一定要先调用find方法让你匹配器中查找符合规则的字符串,否则报错,也就是说必须同时使用,不搭配使用编译器会报错
需求:找出三个字母组成的单词

public class Demo{
    public static void main(String[] args){
        String content = "da jia de jia qi wang bi liao hai kai xin ma";
        String reg = "\\b[a-zA-Z]{3}\\b";
        //先要把字符串的正则表达式编译为Pattern的对象
        Pattern p = Pattern.compile(reg);
        //使用正则对象匹配字符串产生一个Matcher对象
        Matcher m = p.macher(content);
        System.out.println("有符合规则的字符串吗?"+m.find());
        while(m.find()){
            System.out.println("找到的元素为:"+m.group());
        }
    }
}

参考资料

  1. 正则表达式必知必会下载地址:http://download.csdn.net/detail/jpzhu16/9483521

原文地址:https://www.jb51.cc/regex/359393.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐