Java正则表达式语法基础和示例

一、边界符

正则表达式中的边界符(位置符)用来提示字符所处的位置;

^:表示匹配行首的字符(表示以某字符开始的文本 )

$:  表示匹配末尾的字符(表示以某字符结束的文本)

【如果 ^ 和$ 在一起,表示必须是精确匹配】

//以‘p’开始的字符串
System.out.println("pro-file".matches("^p.*"));
//以‘e’结束的字符串
System.out.println("pro-file".matches(".*e$"));
//以‘p’开始 ‘e’结束的字符串
System.out.println("pro-file".matches("^p.*e$"));

二、字符类

默认匹配一个字符

[-]:匹配的字符范围,所有可供选择的都放在方括号内,例如:

        [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

        [a-z&&[^m-p]:        a-z,除了m-p

【注意和边界符 ^ 区别,边界符写到方括号外面】

// 只能是 a  b  c
System.out.println("a".matches("[abc]")); //true
System.out.println("z".matches("[abc]")); //false

// 不能出现a  b  c
System.out.println("a".matches("[^abc]")); //false
System.out.println("z".matches("[^abc]")); //true

三、预定义字符类

默认匹配一个字符

.                通配符,任意字符

\d              数字字符匹配。等效于 [0-9]

\D             非数字字符匹配。等效于 [^0-9]

\s              匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效

\S             匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效

\w             匹配任何字类字符,包括下划线。与"A-Za-z0-9_]等效

\W            匹配任何非单词字符。与[^A-Za-z0-9_]等效

System.out.println("a".matches("\\d")); //false
System.out.println("3".matches("\\d")); //true
System.out.println("333".matches("\\d"));//false
System.out.println("z".matches("\\w"));//true
System.out.println("2".matches("\\w"));//true
System.out.println("21".matches("\\w"));//false
System.out.println("你".matches("\\w"));//false
System.out.println("你".matches("\\W"));//true

四、量词

配合匹配多个字符

X?              X,零次或一次匹配

X*               X,零次或多次匹配

X+               X,一次或多次

X{n}            X,正好n次

X{n, }          X,至少n次

X{n,m}        X,至少n次但是不超过m次

// 必须是数字 字母 下划线 至少 6位
System.out.println("2442fsfsf".matches("\\w{6,}"));//true
System.out.println("244f".matches("\\w{6,}"));//false

// 验证码 必须是数字和字符  必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23_F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false

 五、利用正则表达式,爬取信息

步骤:

        ① 定义正则表达式,字符串形式

        ② 生成Pattern匹配对象,正则表达式的编译表示形式。若要使用正则表达式必须将其【编译到此类】的实例中

        ③ 生成Matcher内容匹配器对象,Matcher 也没有公共构造方法。需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象进行生成

//爬取出 电话号码和邮箱。
String rs = "电话020-43422424,微信:" +
            "damiao@java.cn,电话18762832633,0203232323" +
            "邮箱damiao@java.cn,400-100-3233 ,4001003232";
// 1、定义爬取规则,字符串形式
    String regex = "(0\\d{2,6}-?\\d{5,20})|(1[3-9]\\d{9})|(400-?\\d{3,9}-?\\d{3,9})|        (\\w{1,30}@([\\w&&[^_]])+(\\.([\\w&&[^_]]{2,10})){1,2})";
// 2、把这个爬取规则编译成匹配对象。
    Pattern pattern = Pattern.compile(regex);

// 3、得到一个内容匹配器对象
    Matcher matcher = pattern.matcher(rs);
// 4、开始找了
    while (matcher.find()) {
        System.out.println(matcher.group());
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值