14章、正则表达式介绍

课程大纲
1、认识正则
2、正则表达式
3、Pattern类
4、Matcher类
5、String类对正则的支持
6、示例

1、认识正则

通过一个程序来简单了解一下正则有那些用处:
问题:判断一个字符串是否由数字组成

package com.vinec;

import org.junit.Test;

public class RegexDome {

    @Test
    public void test1(){
        String s="5201314";
        //提取买一个元素
        char [] chars=s.toCharArray();
        boolean flag=true;
        for (int i = 0; i <chars.length ; i++) {
            if(chars[i]<'0'||chars[i]>'9'){
                flag=false;
                break;
            }

        }
        if(flag){
            System.out.println("是由数字组成的");
        }else {
            System.out.println("不是由数字组成的");
        }
    }
}

2、正则表达式

正则表达式(Regular Expression)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
则表达式通常被用来检索、替换那些符合某个模式的文本
java.util.regex包中提供以下两个类对正则表达式的支持:
Matcher 类
通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
Pattern 类
正则表达式的编译表示形式。
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[\t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
X? X,一次或一次也没有
X
X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
(X) X,作为捕获组
非捕获
(?=X) X,通过零宽度的正lookahead
(?!X) X,通过零宽度的负lookahead
(?<=X) X,通过零宽度的正lookbehind
(?<!X) X,通过零宽度的负lookbehind
(?>X) X,作为独立的非捕获组
*

3、Pattern类

public final class Pattern extends Objectimplements Serializable
正则表达式的编译表示形式。指定为字符串的正则表达式必须首先被编译为此类的实例。
典型的调用顺序是
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();

4、Matcher类

public final class Matcher extends Object implements MatchResult
Matcher类的主要功能是用于进行正则的匹配,通过Pattern类中定义完的正则,再使用
Matcher类进行验证或者替换。
常用方法:
boolean matches()
尝试将整个区域与模式匹配。
String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。
String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列。

5、String类对正则的支持

在JDK 1.4之后加入了正则,随后又更新了String的操作类,因为在使用正则中,所有的内
容通过字符串表示的比较多。在String类中有以下的方法可以完成对正则的支持:
boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串
所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串
匹配给定的正则表达式的第一个子字符串。
String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。

 @Test
    public void test3(){
        String s="520131093";
        boolean b=s.matches("[0-9]+");
        boolean b1=s.matches("//d");
        System.out.println(b+"-"+b1);
    }

6、示例

1、验证电话号码(如:010-38389438 )
2、验证手机号码
3、验证用户名,只能是字母开头的数字、字母或下划线的组合
4、验证IP地址(如:192.168.1.1)
5、验证网址(如:http://www.baidu.com)

 @Test
    public void test4(){
        //匹配电话号码
        String phone="138295899854";
        System.out.println(phone.matches("[1][3-9]\\d{9}"));
        //匹配用户名
        String name="abcd123";
        System.out.println(name.matches("[a-zA-Z]+[\\w|-]*"));
        //匹配IP地址
        String addr="http://www.baidu.com";
        System.out.println(addr.matches("http://\\w+.\\w+.\\s*"));
    }

Java中正则表达式与web前端技术JS中的正则大同小异,未来实际开发中,几乎所以数据格式正确性的验证都在前端完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值