java 新手笔记 --(正则篇)-暂时总结

[]和()

[] 表示一个字符,里面可以填写任意字符

[0-9] 表示找包含所有数字
[a-z] 表示找包含字母所有的大写
[A-Z] 表示找包含字母所有的小写
[a-zA-Z]表示找包含字母所有的大小写
[a-zA-Z_]表示找包含字母所有的大小写和下划线 可以省略写法\w
[^a-z]表示找不包含字母所有的小写

() 表示分组 ,里面内容是一个整体

(xyz)         表示找xyz集体出现为1次;
(xyz){n}      表示找xyz集体出现为n次;
(xyz|abc){n}  表示找xyz集体或abc集体出现为n次;

元字符

.  表示找任何一个字符
^  表示找作为字符串开头的匹配项
$  表示找在字符串末尾查匹配项
\s 表示找空白字符
\d 表示找任意一个数字
\w 表示找(字母,数字,下划线)
\D 表示找不是数字
\S 表示找不是空白字符
\W 表示找不是(字母,数字,下划线)
 | abc|xyz 表示找abc或者xyz集体匹配规则 ,一般用与分组使用

量词

n+ 表示n字符至少出现一次
n? 表示n字符可以出现或者不出现(0~1)
n* 表示n字符出现任意次(0-多次)
n{x} 表示n字符出现x次
n(x,y)表示n字符至少出现x次,最多y次
n(x,))表示n字符至少出现x次,

正则表达式(匹配规则,匹配器)

正则表达式的模版(用于寻找符合特定规则的字符)

Pattern compile = Pattern.compile("\\d");\\匹配规则(匹配数字)
Matcher matcher = compile.matcher("There are 12343 apples and 456 oranges.")\\匹配器
while (matcher.find()) 
{System.out.println("Found value: " + matcher.group());
 //输出值 Found value: 12343|Found value:456
System.out.println("Start index: " + matcher.start());
// 输出值 Start index: 10|Start index: 27
System.out.println("End index: " + matcher.end());
// 输出值  End index: 15|End index: 30 
|表示这边第二次输出

 find()     用于判断是否找寻到了匹配该规则的字符 

 group() 用于返回上一次操作的输出结果

 start()   用于返回上一次操作第一次出现的索引值

 end( )    用于用于返回上一次操作最后出现之后的索引值(在没有出现)

用正则检索

举个例子(实例)

判断是否是邮箱

matches(匹配规则regex)

第一种 用matches(匹配规则) 这是只能进行判断是否符合次匹配规则,不符合就返回false

        String s = new String("1787877@1239137.com");
        System.out.println(s.matches("\\w+@\\w+(\\.\\w+)"));\\可以匹配邮箱格式
// \ 是转义字符 用于转义在程序中使用的特殊运算符和元字符(\\d ,\\+,\\.)
      

第二种 用(pattern中compile 和matcher)

        Pattern compile = Pattern.compile("(\\w+@\\w+(\\.\\w)+)");
        Matcher matcher = compile.matcher("1787877@1239137.com");
        System.out.println(matcher.find());\\输出值 true
//容易踩坑点: Pattern compile = Pattern.compile("(\\w+@\\w+(\\.\\w+)");
(\\.\\w+)捕获组会提示为关闭 (\\.\\w)是一个分组 而+ 相等于{1,}
 (\\.\\w)+ =>(\\.\\w){1,}
用正则替换(此方法不能用于正则规则替换正则规则)

replaceAll(匹配规则regex,replacement替换内容) 根据匹配规则找到符合的字符并进行替换

        String line = "abc123DRF456ghi78";
        System.out.println(line);\\输出值 abc123DRF456ghi78
        //把所有的数字替换字母A
        System.out.println(line.replaceAll("\\d", "A"));\\输出值 abcAAADRFAAAghiAA

 进阶玩法(此方法不是正则规则)

将数字替换成大写字母()

        String line = "abc123DRF456ghi78";
        //将所有的数字替换成大写字母
        Random random = new Random();
        StringBuilder stringBuilder = new StringBuilder();
        for (char str :line.toCharArray()){
            if (Character.isDigit(str)){
                stringBuilder.append((char) (random.nextInt(26)+65));
            }
            else{
                stringBuilder.append(str);
            }
        }
        System.out.println(stringBuilder.toString());//这边输出值不固定 这边仅供参考 
        abcXVRDRFLARghiJE
//toCharArray()将字符串转化成单字符数组
//Character.isDigit 判断字符串是否数字
//Random的话生成随机数
用正则拆分

split(匹配规则regex) 按照匹配规则拆分,按啥拆就会把匹配规则的字符给拆没

        String line = "abc123DRF456ghi78";
        String[] split = line.split("\\d+");
        for (String str : split){
            System.out.println(str);
            
        }
/输出值 abc|DRF|ghi |表示分开输出(自我定义)

特殊情况

 String line = "abc123DRF456ghi78";
        String line1 = ".abc.bhj...kj.......";
        String[] split = line1.split("\\.");
        for (String str : split){
            System.out.println(str);

        }
        System.out.println(">>>>>>>>>>");

//最开始有拆分项,就会拆出一个空字符串
//n(连续两个(或两个以上))可拆分项,那么中间也会拆分(n-1)空字符串
//如果末尾连续有多个可拆分项,那么拆出的字符就被忽略了

运行结果

练习时间

拆分url参数和数值

思路 拆 "?"-->拆"&"-->拆"=";(只用split()方法)

当然还有 substring()方法 

拆"?"可以用substring()

       int num = url.indexOf("?");
        System.out.println(url.substring(num+1));//这样也能拆分问号后面的参数和数值
 public static void main(String[] args) {
        String url = "https://baijiahao.baidu.com/s?id=1718644303778505779&wfr=spider&for=pc";
        String[] split = url.split("\\?");
        String[] split1 = split[1].split("&");
        for (String value : split1){
            String[] split2 = value.split("=");
            System.out.println("键值:\t"+split2[0]+" 数值:\t"+split2[1]);
        }
//输出值  |键值:	id 数值:	1718644303778505779
|键值:	wfr 数值:	spider
|键值:	for 数值:	pc
| 表示 顶格


    }

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值