java常用类(1)——正则表达式

正则表达式

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

public class Regexp {
    public static void main(String[] args) {
        String string ="Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++" +
                "里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作" +
                "为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1] 。" +
                "Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2" +
                "]  。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 [3]  。";
        //先创建一个Pattern对象,可以理解成就是一个正则表达式对象
        Pattern pattern = Pattern.compile("[a-zA-Z]+");
        //创建一个匹配器对象
        //理解:匹配器按照pattern到string文本中匹配
        //找到就返回true 否则false
        Matcher matcher = pattern.matcher(string);
        //可以开始循环匹配
        while(matcher.find()){
            System.out.println(matcher.group(0));
        }

    }
}

正则表达式就是某种模式去匹配字符串的一个公式

底层实现

matcher.find()

1.根据指定的规则,定位满总规则的子字符串(如:Java)

2.找到后,将字符串的开始的索引记录到matcher对象的属性 int[] group;

groups[0] = 0 把该子字符串的结果的索引+1的值记录到groups[1] = 4

3.同时纪律oldLast的值为 子字符串的结果的 索引+1的值即 4,即下次执行find时,就从4开始匹配

matcher.group(0)

    public String group(int group) {
        if (first < 0)
            throw new IllegalStateException("No match found");
        if (group < 0 || group > groupCount())
            throw new IndexOutOfBoundsException("No group " + group);
        if ((groups[group*2] == -1) || (groups[group*2+1] == -1))
            return null;
        return getSubSequence(groups[group * 2], groups[group * 2 + 1]).toString();
    }
​

1.根据groups[0] 和 groups[1] 记录的位置,从content开始截取字符串返回 [0,4) 不包含索引为4的位置

如果正则表达式有()即分组 {(”(//d//d)(//d//d)“)} 

取出的字符串规则如下

group(0) 表示匹配到的字符串

group(1) 表示匹配带的字符串的第一组字串

group(2) 表示匹配带的字符串的第二组字串

正则表达式语法

元字符- 转义号\\

在java的正则表达式中,两个\\代表其他语言中的一个\

用$去匹配  "abc$()" 规则"\\$"

元字符-字符匹配符

java正则表达式默认是区别字母大小写的,如何实现不区分大小写

1.(?i)abc  表示abc都不区分大小写

2.a(?i)bc  表示bc不区分大小写

3.a((?i)b)c  表示只有b不区分大小写

4.Pattern pat = Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

符号意义示例解释
[]可接收的字符列表[efg]e、f、g中发任意一个字符
[^]不可接收的字符列表[^ab]除了a、b之外的任意1个字符包括数字和特殊字符
-连字符A-Z任意单个大写字母
.匹配除\n以外的任意字符a..b以a开头,b结尾,中间包阔2个任意字符的长度为4的字符串
\\d匹配单个数字字符,相当于[0-9]\\d{3}(\\d)?包含3个或4个数字的字符串
\\D匹配单个数字字符,相当于[^0-9]\\D(\\d)*以单个非数字字符开头,后接任意个数字字符串
\\w匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z]\\d{3}\\w{4}以3个数字字符开头的长度为7的数字字母字符串
\\W匹配单个数字、大小写字母字符,相当于[^0-9a-zA-Z]\\W+\\d{2}以至少1个非数字字母字符开头,2个数字字符结尾的字符串

 元字符-选择匹配符

符号意义示例解释
|匹配”|"之前或之后的表达式ab|cdab或者cd

元字符-限定符(java匹配默认贪婪匹配,即尽可能匹配更多)

符号意义示例解释
*指定字符重复0次或n次(无要求)(abc)*仅包含任意个abc的字符产,等效于\w*
+指定字符重复1次或n次(至少一次)m+(abc)*以至少1个m开头,后接任意个abc的字符串
指定字符重复0次或1次(最多一次)m+abc?以至少1个m开头,后接ab或abc的字符串
{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串
{n,}指定至少n个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串
{n,m}指定至少n个但不多于m个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串

元字符-定位符

符号意义示例解释
^指定起始字符^[0-9]+[a-z]*以至少1个数字开头,后接任意个小写字母的字符串
$指定结束字符^[0-9]\\-[a-z]+$以1个数字开头后接连字符”-“,并以至少1个小写字母结尾的字符串
\\b匹配目标字符串的边界jin\\b这里说的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置
\\B匹配目标字符串的非边界jin\\B

和\b的含义刚刚好相反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值