正则表达式初步

前端之家收集整理的这篇文章主要介绍了正则表达式初步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

正则表达式初步



预定义字符类


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

表示 含义 实例 结果
\\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.f2er.com/regex/359393.html

猜你在找的正则表达式相关文章