黑马程序员——正则表达式详解

来源:互联网 发布:python 2.7 sorted 编辑:程序博客网 时间:2024/05/30 05:30


01.------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、概述

      正则表达式在Java十分重要,初学者往往认为它很难,因为它很多,很乱。但是,当你静下心来好好总结,你会发现其实它很简单,本篇文章是自己学习正则表达式的总结。旨在让大家快速学会Java正则表达式。

      话入正题,那么什么事正则表达式呢?它的本质又是什么呢?好吧,首先,我就想回答这两个问题吧,正则表达式就是按一定规则进行匹配的字符串,也就是说它的本质就是字符串。而且,我还可以告诉你,String类中的match(String regx),split(String regx)以及replaceAll(String regx)方法,都会用到正则表达式,那么下面让我们边思考,边学习正则表达式吧。

二、常见的匹配规则

      我们在上面说过,正则表达式是按一定规则进行匹配的字符串,那么我们首先就要了解它的匹配规则,常见的匹配规则如下:

  A:字符
   x 字符 x。举例:'a'表示字符a
   \\ 反斜线字符。
   \n 新行(换行)符 ('\u000A')
   \r 回车符 ('\u000D')
   
  B:字符类
   [abc] a、b 或 c(简单类)
   [^abc] 任何字符,除了 a、b 或 c(否定)
   [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
   [0-9] 0到9的字符都包括
   
  C:预定义字符类
   . 任何字符。我的就是.字符本身,怎么表示呢? \.
   \d 数字:[0-9]
   \w 单词字符:[a-zA-Z_0-9]
    在正则表达式里面组成单词的东西必须有这些东西组成

  D:边界匹配器
   ^ 行的开头
   $ 行的结尾
   \b 单词边界
    就是不是单词字符的地方。
    举例:hello world?haha;xixi
   
  E:Greedy 数量词
   X? X,一次或一次也没有
   X* X,零次或多次
   X+ X,一次或多次
   X{n} X,恰好 n 次
   X{n,} X,至少 n 次
   X{n,m} X,至少 n 次,但是不超过 m 次

      以上仅仅为我们常用的,并不是全部的,但是,它已经能满足我们大部分需求了,如果,我们有更苛刻的要求,请详见api。

三、实例演示

       个人认为说的再多,不如用几个例子效果来的快,下面就举两个例子进行学习:

       (1)邮箱验证功能,测试数据为 dyn@qq.com   itheima@heima.com.cn jdbaidu@163.com 。代码实现如下:

package com.dyn.itheima.test12;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Regex {

 public static void main(String[] args) {

  // 创建输入流
  BufferedReader reader = new BufferedReader(new InputStreamReader(
    System.in));
  //提示
  System.out.println("请输入邮箱");
  // 定义匹配规则
  String regex = "\\w+@(\\w{1,10}\\.\\w{1,10}){1,2}";
  try {
   // 获取输入数据
   String email = reader.readLine();
   // 判断是否匹配
   if (email.matches(regex)) {
    System.out.println("恭喜你,你输入邮箱 " + email + " 格式合格");
   } else {
    System.out.println("抱歉,你输入邮箱 " + email + " 格式不合格");
   }
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

        (2)从指定字符串中,获取子字符串。测试数据为 “hello java , how are you? yes i am , Thanks ,and you? Aye you ok?” ,要求从中找出两个字母的单词。测试代码如下:

package com.dyn.itheima.test12;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Regex1 {

 public static void main(String[] args) {

  // 定义册书数据
  String src = "hello java,how are you? yes i am,Thanks,and you?Are you ok?";
  //定义匹配规则
  String regex = "\\s\\w{2}\\b";
  //创建匹配模式
  Pattern pattern = Pattern.compile(regex);
  //返回匹配器
  Matcher matcher = pattern.matcher(src);
  //输出查询结果
  while(matcher.find()){
   System.out.println(matcher.group());
  }

 }
}


四、总结

       上面的例子简单吧,如果你感觉难,那么很有可能是上面的用到的方法,不够熟悉。那么接下来,你需要做的就是,查看api,把上面的代码看懂,然后自己可以再练习几个,比如身份证验证,邮编验证等等,相信你会很快掌握Java正则表达式的用法。另外呢,本人技术有限,上面的代码可能存在不合理的地方,还望大家积极点评。










0 0