黑马程序员——java基础——正则表达式

来源:互联网 发布:mac unix 编辑:程序博客网 时间:2024/05/21 10:17

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


正则表达式:
    (1)概述:就是符合一定规则的字符串
    (2)常见规则
        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 次
    (3)常见功能:
        A:判断功能
            String类的  public boolean matches(String regex)
        B:分割功能
            String类的  public String[] split(String regex)
        C:替换功能
            String类的  public String replaceAll(String regex,String replacement)
        D:获取功能
            Pattern和Matcher
                Pattern p = Pattern.compile("a*b");
                Matcher m = p.matcher("aaaaab");
                
                find():查找存不存在
                group():获取刚才查找过的数据
    (4)案例
        A:判断QQ号码

<span style="font-size:18px;">public class RegexDemo {public static void main(String[] args) {// 创建键盘录入对象Scanner sc = new Scanner(System.in);System.out.println("请输入你的QQ号码:");String qq = sc.nextLine();System.out.println("checkQQ:"+checkQQ(qq));}       public static boolean checkQQ(String qq) {boolean flag = true;// 校验长度if (qq.length() >= 5 && qq.length() <= 15) {// 0不能开头if (!qq.startsWith("0")) {// 必须是数字char[] chs = qq.toCharArray();for (int x = 0; x < chs.length; x++) {char ch = chs[x];if (!Character.isDigit(ch)) {flag = false;break;}}} else {flag = false;}} else {flag = false;}return flag;}}</span>


        B:按照不同的规则分割数据

<span style="font-size:18px;">public class RegexDemo2 {public static void main(String[] args) {// 定义一个字符串String s1 = "aa,bb,cc";// 直接分割String[] str1Array = s1.split(",");for (int x = 0; x < str1Array.length; x++) {System.out.println(str1Array[x]);}System.out.println("---------------------");String s2 = "aa.bb.cc";String[] str2Array = s2.split("\\.");for (int x = 0; x < str2Array.length; x++) {System.out.println(str2Array[x]);}System.out.println("---------------------");String s3 = "aa    bb                cc";String[] str3Array = s3.split(" +");for (int x = 0; x < str3Array.length; x++) {System.out.println(str3Array[x]);}System.out.println("---------------------");//硬盘上的路径,我们应该用\\替代\String s4 = "E:\\JavaSE\\day14\\avi";String[] str4Array = s4.split("\\\\");for (int x = 0; x < str4Array.length; x++) {System.out.println(str4Array[x]);}System.out.println("---------------------");}}</span>


        C:把论坛中的数字替换为*

<span style="font-size:18px;">public class RegexDemo {    public static void main(String[] args) {        // 定义一个字符串        String s = "helloqq12345worldkh622112345678java";        // 我要去除所有的数字,用*给替换掉         String regex = "\\d+";         String ss = "*";                       String result = s.replaceAll(regex, ss);         System.out.println(result);    }}</span>


        D:获取字符串中由3个字符组成的单词

<span style="font-size:18px;">public class RegexDemo2 {public static void main(String[] args) {// 定义字符串String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";// 规则String regex = "\\b\\w{3}\\b";// 把规则编译成模式对象Pattern p = Pattern.compile(regex);// 通过模式对象得到匹配器对象Matcher m = p.matcher(s);while (m.find()) {System.out.println(m.group());}// 注意:一定要先find(),然后才能group()  String ss = m.group();  System.out.println(ss);}}</span>



0 0