【Java学习笔记】13.正则表达式

1.正则表达式语法
1.正则表达式:符合一定规则的字符串

**
将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,”n”匹配字符”n”。”\n”匹配换行符。序列”\”匹配”\”,”(“匹配”(“。
^
匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与”\n”或”\r”之后的位置匹配。
$
匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与”\n”或”\r”之前的位置匹配。
*
零次或多次匹配前面的字符或子表达式。例如,zo* 匹配”z”和”zoo”。* 等效于 {0,}。
+
一次或多次匹配前面的字符或子表达式。例如,”zo+”与”zo”和”zoo”匹配,但与”z”不匹配。+ 等效于 {1,}。
?
零次或一次匹配前面的字符或子表达式。例如,”do(es)?”匹配”do”或”does”中的”do”。? 等效于 {0,1}。
{n}
n 是非负整数。正好匹配 n 次。例如,”o{2}”与”Bob”中的”o”不匹配,但与”food”中的两个”o”匹配。
{n,}
n 是非负整数。至少匹配 n 次。例如,”o{2,}”不匹配”Bob”中的”o”,而匹配”foooood”中的所有 o。”o{1,}”等效于”o+”。”o{0,}”等效于”o*”。
{n,m}
M 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的头三个 o。’o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。
?
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是”非贪心的”。”非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的”贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串”oooo”中,”o+?”只匹配单个”o”,而”o+”匹配所有”o”。
.
匹配除”\r\n”之外的任何单个字符。若要匹配包括”\r\n”在内的任意字符,请使用诸如”[\s\S]”之类的模式。
x|y
匹配 x 或 y。例如,’z|food’ 匹配”z”或”food”。’(z|f)ood’ 匹配”zood”或”food”。

2.Pattern类
(1) 8种模式:比如启用多行模式,启用unix模式等,eg int CASE_INSENSITIVE表示启用不区分大小写的模式。
(2) 4个静态方法
两个单例模式构造器:
Pattern compile(String regex);
Pattern compile(String regex,int flags)flags为八种模式的一种
eg2:
Pattern p=Pattern.compile(“[a-z]\s[a-z]”);
Matcher m=p.matcher(“b c”);
if(m.matches()) Sysout(1111);
else Sysout(2222); 输出结果为1111;
一个匹配方法,一个返回String的字面值模式方法:
boolean matches(String regex,CharSequence input);//input与regex匹
配返回true。
String quote(String s);//返回指定String的字面值。
eg3:boolean bool=Pattern.matches(“[a-z] [a-z]”,”bc”); //结果为true
Sysout(Pattern.quote(“a_#/tb”));//输出结果为 “\Qa_# b”\E
(3) 6个普通方法
返回此模式的匹配器: Matcher matcher(CharSequence input);
返回此模式的标志: int flags();
返回此模式的regex: String pattern();
两个字符串切割方法: String[] split(CharSequence input);
String[] split(CharSequence input,intlimit);
limit为返回字符串的个数,如果等于0,返回所有拆分的字符串,如果大于拆分字符串的实际个数,返回实际个数。
toString方法: String toString();

3.示例
1.例如:案例:键盘录入qq号码,校验QQ号码。
需求:
1:要求必须是5-15位数字
2:0不能开头

import java.util.Scanner;

/**
 * 案例: 键盘录入qq号码,校验QQ号码。 
 * 需求: 1:要求必须是5-15位数字 
         * 2:0不能开头
 */
public class RegexDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 键盘录入qq号码
        System.out.println("请输入您的qq号码");
        // 获取录入数据
        String qq = sc.nextLine();
        //创建方法,里面使用正则表达式实现
        System.out.println(isCheck2(qq));
    }

    private static boolean isCheck2(String qq) {
        //定义正则表达式
        String reg = "[1-9][0-9]{4,14}";
        return qq.matches(reg);
    }



}

2.校验电话号码

public class RegexDemo {
    public static void main(String[] args) {
        // 校验电话号码
        /*
         * 13245678901 13332345678 13456789012 18812345678 18999999999
         * 18666666666 18786868686
         */
        //定义正则表达式
        String reg = "1[38][0-9]{9}";
        //System.out.println("键盘输入电话号码");
        String number = "13245678901";
        System.out.println(number.matches(reg));
    }

}

3.切割字符串

import java.util.Arrays;

/*
 *   我有如下一个字符串:”91 27 46 38 50”
       请写代码实现最终输出结果是:”27 38 46 50 91”
 */
public class SplitExercise {
    public static void main(String[] args) {
        String str = "91 27 46 38 50";

        //设定正则表达式
        String reg = " ";

        //运用split方法切割
        String[] strs = str.split(reg);

        //将String数组转换为int数组并排序
        int[] arr = new int[strs.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }

        //排序
        Arrays.sort(arr);

        //将int[]转换为StringBuffer
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]+" ");
        }
        //将StringBuffer转换为String
        System.out.println(sb.toString());
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值