正则表达式的学习和练习

版权声明:四川华迪信息技术有限公司java实训班乔二 https://blog.csdn.net/qxqx451/article/details/79135758

正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。是用正则表达式来完成邮箱,账号的验证可以省去繁杂的逻辑,用更少的代码完成更复杂的事务。
通过学习我大致把当前学习的常见的字符分为四种:

1,预定义字符类

  • .:任何字符
  • \d : 数字[0-9]
  • \D:非数字[^0-9]
  • \s : 空白字符[\t\n\xOB\f\r]
  • \S : 非空白字符[^\s]
  • \w : 单词字符[a-zA-Z_0-9]
  • \W : 非单词字符[^\w]

2,数量词

  • X? X,一次或一次也没有;
  • X* X,零次或多次;
  • X+ X,一次或多次;
  • X{n} X,恰好n次;
  • X{n,} X,至少n次;
  • X{n,m} X,至少n次,不超过m次;

3,表示逻辑运算的词

正则表达式中的逻辑运算的词和java中逻辑运算符基本相同,除了逻辑非在正则表达式中是使用 ^ 表示

4,三个括号的使用

  1. [ ]方括号中一般放预定义字符类,多个字符之间用默认逻辑或连接。
    例如:
    [abc] 表示a或b或c
    [A-Za-z_0-9] 表示单词字符
  2. { }花括号表示数量词
  3. ( )圆括号表示捕获组,圆括号中的内容作为一组来被识别
    例如:
    (abc) 表示abc
    在圆括号中可以使用逻辑符号连接
    例如:
    (abc|def)表示abc或def

感觉把正则表达式大致的分为这三个类会更好理解,记忆,学习以及使用

在API文档Pattern类下提供的正则表达式的典型调用方法是

在API文档Pattern类下提供的正则表达式的典型调用方法是

Pattern p = Pattern.compile("a*b");
 Matcher m = p.matcher("aaaaab");
 boolean b = m.matches();

平时使用时可以直接调用String类下的matchs()方法

matches
public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。
调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:

Pattern.matches(regex, str)

参数:
regex - 用来匹配此字符串的正则表达式
返回:
当且仅当此字符串匹配给定的正则表达式时,返回 true
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern

正则表达式的常见应用

  1. 用正则表达式验证邮箱账号
/**
* 邮箱验证
*6-18位任意单词字符+@+2-6位任意单词字符+一位或多位.+任意单词字符
*/
public static void test1(String str2) {
        String str="\\w{6,18}@\\w{2,6}(\\.\\w)+";
        //Scanner sc=new Scanner(System.in);
        System.out.println("请输入邮箱");
        //String str2=sc.next();
        System.out.println("str2.matches(str)     "+str2.matches(str));
    }

2 .正则表达式完成切割指定字符的功能

/**
 * 
 * 切割 字符串中的逗号
 */
    public static void test2() {

        String numbers="1,2,3,4,5,6,7,8,9,0";
        String regex=",";
        String [] str=numbers.split(regex);
        for(int i=0;i<str.length;i++) {
            System.out.println(str[i]);
        }

    }

3 . 正则表达式玩成替换指定字符的功能

/**
 * 
 *  替换字符串中的单词字母
 */
    public static void testReplace() {
        String str="aaaa1ahnvuhfewoi11384209e7439fsdhfdohd8892489";
        String regex="[a-zA-Z]";
        String str2=str.replaceAll(regex, "");
        System.out.println(str2);
        //输出   11138420974398892489
    }

4 . 匹配并取出指定的字符串

    /**
     * 
     * 
     * 取出指定的字符串
     */
    public static void testBoundary() {
        // 定义字符串
        String s = "abc 1234 efg a d,e hhh aa";

        // 规则 单词边界+三位任意字符+单词边界
        String regex = "\\b\\w{3}\\b";

        // 把规则编译成模式对象
        Pattern p = Pattern.compile(regex);
        // 通过模式对象得到匹配器对象
        Matcher m = p.matcher(s);
        // 调用匹配器对象的功能
        // 通过find方法就是查找有没有满足条件的子串

        //第一步,找到 find()
        while (m.find()) {
            //第二步 ,把找到的东西拿出来  group
            String string = m.group();
            System.out.println(string);
            //输出abc efg hhh
        }


    }

5.正则表达式的分组功能

/**
 * 
 * 分组
 * (..)表示两位任意字符(...)表示三位任意字符1+表示第一个()的内容重复
 * 一次或者多次
 */
    public static void testRegexGroup() {
        String regex="(..)(...)\\1+";
        System.out.println("高兴高高兴高兴高兴高兴高兴".matches(regex));
        //输出true
        System.out.println("快快乐乐".matches(regex));
        //输出false   
    }

猜你喜欢

转载自blog.csdn.net/qxqx451/article/details/79135758