正则表达式里Matcher中group()/group(int group)/groupCount()用法

6 篇文章 0 订阅
4 篇文章 0 订阅

1.正则表达式简述

        正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式中符号的具体含义可以网上搜索。

        在开发中判断用户的输入是否符合特定要求的类型格式时,使用正则表达式来进行格式判断是一种非常便捷的方式。

2.17种常用正则表达式

"^-?\d+$"    //整数

"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0)

"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0)

"^\d+$"  //非负整数(正整数 + 0)

"^[0-9]*[1-9][0-9]*$"  //正整数

"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)

"^-[0-9]*[1-9][0-9]*$"  //负整数

"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数

"^(-?\d+)(\.\d+)?$"  //浮点数

"^[A-Za-z]+$"  //由26个英文字母组成的字符串

"^[A-Z]+$"  //由26个英文字母的大写组成的字符串

"^[a-z]+$"  //由26个英文字母的小写组成的字符串

"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串

"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串

"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址

"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url

3.Matcher中group()/group(int group)/groupCount()用法

package com.example.test.util;

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

public class MatcherTest {
public static void main(String[] args) 
    Pattern p = Pattern.compile("(ca)(t)"); 
    Matcher m = p.matcher("one cat,two cats in the yard"); 
    StringBuffer sb = new StringBuffer(); 
    boolean result = m.find(); 
    System.out.println("groupCount为:"+m.groupCount());
    for(int i=0;i<=m.groupCount();i++){
        System.out.println("第"+i+"个子串为:"+m.group(i));
    }
}

输出如下:

groupCount为:2
第0个子串为:cat
第1个子串为:ca
第2个子串为:t

可以这样理解:m.groupCount()表示()的个数,每个()表示需要一次匹配,这个小括号要特别注意。

m.group(0)表示要匹配满足正则表达式中所有括号里的字符串的第一个值,因此为cat。

m.group(1)表示匹配正则表达式中的第一个括号里的内容即可,因此为ca,注意,也是第一次的值。

m.group(2)表示匹配正则表达式中的第二个括号里的内容即可,因此为t,注意,也是第一次的值。

        比如我今天使用"音量[\\s\\S]*?([1-9]{0,1}[0-9]?%)"来匹配“音量调整为30%”这样带有百分数的语句,最开始搞错了正则化表达式,匹配百分数的部分多了(),于是爆出了问题。反复调试后得到下面的用来判断百分数的正则化api,在需要判断输入字符串是否未百分数的地方调用isScore就可以得出结论。可以作为工具方法来使用,正则化就是这么方便。

//是否百分数
public static boolean isScore(String text) {
    String regex = "([1-9]{0,1}[0-9]?%)";
    Pattern p= Pattern.compile(regex);
    Matcher m = p.matcher(text);
    return m.find();
}

通常我们可以通过在线工具迅速检查自己的正则化表达式是否正确,比如http://tool.oschina.net/regex/#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值