正则表达式

正则表达式

一.什么是正则表达式?

  • 正则表达式使用单个字符串来描述,匹配一系列符合某个句法规则的字符串的搜索模式

  • 用某种模式去匹配一类字符串的公式

  • 正则表达式类似于生活中的合同。使用特殊的符号来操作字符串,用来判断字符串是否满足匹配的规则。

  • 正则的作用:

    • 测试字符串内的模式
    • 替换文本
    • 从字符串中提取子字符串
  • 优点:大大的简化代码量

  • 缺点:阅读性差

二.正则语法

字符匹配用法
.所有字符注意:\\.表示 .
\转义符java中使用以下字符都要加上\
\d所有数字\\d
\D非数字 [^0-9]\\D
[0-9]所有数字 作用同\d
[a-z]所有的小写字母
[A-Z]所有的大写字母
\s一个空格\\S
\w所有字母,数字,下划线,相当于[a-zA-Z_0-9]\\W
\w非单词字符 [^\w]\\W
^表示开头注意:^[0-9][^0-9]的区别
$表示结尾
[\u4e00-\u9fa5]匹配汉字有事100,有酒罚我
表示匹配的字符出现的次数为0或1次
+一次或多次
*零次或多次
{n}n次
{n,}至少n次
{n,m}至少n次,至多m次

三.案例

1.匹配
 //验证手机号:1. 长度 11位  2.纯数字 3.第二位数字为[35789]
    private static void fun1() {
        String phone="13565248952";
        String reg="[1][35789][0-9]{9}";
        String reg1="1[35789]\\d{9}";
        boolean f = phone.matches(reg1);
        System.out.println(f);
    }
2.切割
  • 术语解释:将指定的字符串按照给定的规则(正则表达式)进行切割。
 //切割
    private static void fun2() {
        String names="张三.李四.王二麻子";
        String[] ns = names.split("\\.");
        System.out.println(Arrays.toString(ns));
    }
3.替换
  • 术语解释:将指定的字符串按照给定的规则(正则表达式)替换成新的字符串,返回值是String
//替换--电话
    private static void fun3() {
        String info="我家的娃娃体验感更好,联系方式:13538384938";
        String newInfo = info.replaceAll("1[35789][0-9]{9}", "110");
        System.out.println(newInfo);
    }
  • 过滤叠词
 //替换--叠词--分组
    private static void fun4() {
        String s="你好胖胖呀,肉肉好多呀,你好坏坏坏呀呀呀呀!";
        //String reg="(.)\\1{1,}";//1:再出现一次 ,共两次
        String reg="(.)\\1+";//1:再出现一次 ,共两次
        String ss = s.replaceAll(reg, "$1");
        System.out.println(ss);

    }
4.分组
  • (.) 表示 匹配任意一个字符,作为一组
  • (.(a)) 整体作为第一组 \\1 ,内层 (a)作为第二组 \\2
  • $1用于取出第一组 , $2用于取出第二组
//替换--叠词--分组
    private static void fun5() {
        //区分匹配到的 和 获取到的
        String s="吃饭饭";
        String reg="(.(饭){2})";
        //String reg="(.(饭))\\2";
        String ss = s.replaceAll(reg, "$1");
        System.out.println(ss);//吃饭 替换  吃饭饭

        String s1="吃饭饭吃饭饭";
        String reg2="(.(饭){2})\\1";
        String h = s1.replaceAll(reg2, "$1");
        System.out.println(h);//吃饭饭
    }
拓展 - 白冰的表白
//1:白冰:我喜欢你
    private static void fun6() {
        String s="白冰:我喜喜...喜..喜喜..欢...欢欢..欢.欢欢.欢....你";
        //1.替换 .  ""
        String reg="\\.+";
        String s1 = s.replaceAll(reg, "");
        System.out.println(s1);
        //2.去叠词--分组  我喜喜喜喜喜欢欢欢欢欢欢欢你
        String reg2="(.)\\1+";
        String s2 = s1.replaceAll(reg2, "$1");
        System.out.println(s2);
    }
  • 邮箱验证
/*
    邮箱
    模块一:数字,字母,下划线 长度 3-12
    模块二:要么纯数字,要么纯字母,长度 2-6
    模块三:.com .cn 出现次数 1-3
     */

    private static void fun7() {
        String mail="abc_1243@163.com.cn";
        String reg="\\w{3,12}@(\\d{2,6}|[a-zA-Z]{2,6})(\\.[a-z]{2,3}){1,2}";
        boolean f = mail.matches(reg);
        System.out.println(f);

    }
  • 年龄
// 年龄130以内 1-99 | 100-129 |  130
    private static void fun8() {
        String age="-13";
        String reg="[1-9]\\d?|1[012]\\d|130";
        System.out.println(age.matches(reg));

    }
  • 汉字和空格
 private static void fun9() {
       String s="你好  ";
       String reg="^[\\u4e00-\\u9fa5]{2}\\s{2}";
        boolean m = s.matches(reg);
        System.out.println(m);

    }
拓展
<form id="form1" action="http://111.13.100.91/" method="post">
    <table border="1" width="600">
        <tr>
            <td>昵称:</td>
            <td><input type="text" name="nick" pattern=".{4,10}" required placeholder="请输入4-10的字符"></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="pwd" pattern=".{6,16}" required placeholder="请输入6-16位字符"></td>
        </tr>
        <tr>
            <td>手机号:</td>
            <td><input type="text" name="phone" pattern="1[35789]\d{9}" required placeholder="请输入正确的手机号码"></td>
        </tr>
        <tr>
            <td>邮箱:</td>
            <td><input type="email" name="email" required placeholder="请输入正确的邮箱格式"></td>
        </tr>
        <tr>
            <td>年龄:</td>
            <td><input type="text" pattern="^[1-9]\d*$" name="age" placeholder="请输入一个正数"></td>
        </tr>
        <tr>
            <td><input type="submit" value="注册"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
    </table>
</form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值