java中获取字符串中满足正则表达式的元素集合

目录

1.说明

2.从"as1285dfSWE45"中提取单个小写字母

3.从"aHs12DF85dfSWE45"中提取连续大写字母

4.从"[1024]*100-52[587] + [24$]"中提取[]中的数字

5.总结


1.说明

在开发中有时需要从字符串中提取特定的字符,如下:

从"as1285dfSWE45"中提取大写字母或者小写字母或者数字

从"[1024]*100-52[587] + [24$]"中提取[]中的数字

2.从"as1285dfSWE45"中提取单个小写字母

        String str = "as1285dfSWE45";
        // 正则表达式,匹配单个小写字母
        String regex1 = "[a-z]";
        // 编译正则表达式
        Pattern pattern1 = Pattern.compile(regex1);
        Matcher matcher1 = pattern1.matcher(str);

        // 创建一个ArrayList存储匹配结果
        ArrayList<String> numbers = new ArrayList<>();

        // 查找匹配的序列
        while (matcher1.find()) {
            // 获取匹配到的数字字符串,并添加到列表中
            numbers.add(matcher1.group());
        }
        System.out.println(numbers);

结果:

[a, s, d, f]

说明:

正则表达式中的[]表示匹配单个字符,里面的内容是字符组,使用-表示范围,使用^表示相反,如下:

[a-z]      // 匹配所有的小写字母

[A-Z]      // 匹配所有的大写字母

[a-zA-Z]   // 匹配所有的字母

[A-z]      // 匹配所有的字母,同[a-zA-Z]

[0-9]      // 匹配所有的数字

[0-9\.\-]      // 匹配所有的数字、句号、减号

[ \n\f\r\t\v]  // 匹配所有的空白字符(空格、换行符、换页符、回车符、水平制表符、垂直制表符)

[^0-9]   //匹配非数字字符

3.从"aHs12DF85dfSWE45"中提取连续大写字母

示例:

        String str = "aHs12DF85dfSWE45";
        // 正则表达式,匹配小写字母
        String regex1 = "[A-Z]+";
        // 编译正则表达式
        Pattern pattern1 = Pattern.compile(regex1);
        Matcher matcher1 = pattern1.matcher(str);

        // 创建一个ArrayList存储匹配结果
        ArrayList<String> numbers = new ArrayList<>();

        // 查找匹配的序列
        while (matcher1.find()) {
            // 获取匹配到的数字字符串,并添加到列表中
            numbers.add(matcher1.group());
        }
        System.out.println(numbers);

结果:

[H, DF, SWE]

说明:

正则表达式中,

+ 号代表前面的字符必须至少出现一次(1次或多次)。

* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

? 问号代表前面的字符最多只可以出现一次(0次或1次)。

所以如果要捕获到单个或者多个相连的满足条件的字符,需要使用加号。

上面示例中,使用?结果如下:

[, H, , , , D, F, , , , , S, W, E, , , ]

使用*结果如下:

[, H, , , , DF, , , , , SWE, , , ]

4.从"[1024]*100-52[587] + [24$]"中提取[]中的数字

示例1:

        String str = "[1024]*100-52[587] + [24$]";
        // 正则表达式,匹配小写字母
        String regex1 = "\\[\\d+\\]";
        // 编译正则表达式
        Pattern pattern1 = Pattern.compile(regex1);
        Matcher matcher1 = pattern1.matcher(str);

        // 创建一个ArrayList存储匹配结果
        ArrayList<String> numbers = new ArrayList<>();

        // 查找匹配的序列
        while (matcher1.find()) {
            // 获取匹配到的数字字符串,并添加到列表中
            numbers.add(matcher1.group());
        }
        System.out.println(numbers);

结果1:

[[1024], [587]]

说明1:

在 Java 的正则表达式中,方括号 [] 是用来定义字符集的元字符,用于指定一组可能出现在匹配位置的字符。如果你需要在正则表达式中匹配方括号本身 [],或者在字符集中匹配方括号字符,你需要对它们进行转义处理。

要在 Java 正则表达式中匹配方括号 [],可以使用反斜杠 \ 进行转义,即将它们写成 \[\]。同样,如果你要在字符集中匹配方括号字符 [],也需要进行相同的转义处理。

例如,如果你想匹配包含方括号 [] 的字符串,可以编写如下的正则表达式:

String regex = "\\[.*\\]";

在上面的例子中,\\[ 匹配左方括号 [\\] 匹配右方括号 ]. 匹配任意字符,* 表示前面的字符可以重复零次或多次。

记得在 Java 中使用正则表达式时,由于反斜杠在字符串中也是转义字符,因此需要双重转义,即使用两个反斜杠 \\ 来表示一个反斜杠。

示例2:

通过上面的方式获取到了中括号及其中的数字,并没有获取到中括号内所有的数字内容,可以通过下面的方式进行实现

        String str = "[1024]*100-52[587] + [24$]";
        // 正则表达式,匹配小写字母
        String regex1 = "\\[(\\d+)\\]";
        // 编译正则表达式
        Pattern pattern1 = Pattern.compile(regex1);
        Matcher matcher1 = pattern1.matcher(str);

        String regex2 = "\\[(\\d+)\\$\\]";
        // 编译正则表达式
        Pattern pattern2 = Pattern.compile(regex2);
        Matcher matcher2 = pattern2.matcher(str);
        // 创建一个ArrayList存储匹配结果
        ArrayList<String> numbers = new ArrayList<>();

        // 查找匹配的序列
        while (matcher1.find()) {
            // 获取匹配到的数字字符串,并添加到列表中
            numbers.add(matcher1.group(1));
        }
        // 查找匹配的序列
        while (matcher2.find()) {
            // 获取匹配到的数字字符串,并添加到列表中
            numbers.add(matcher2.group(1));
        }
        System.out.println(numbers);

结果:

[1024, 587, 24]

说明:

捕获组的说明:

在正则表达式中,括号()用来创建一个捕获组(capturing group)。捕获组允许您对匹配的子表达式进行分组,并且可以通过索引或名称来获取这些组的内容。

使用括号可以实现以下几个功能:

  1. 分组:通过括号将多个表达式分组在一起,以便对它们作为一个整体进行操作,如应用量词或其他操作符。

  2. 捕获:括号内的内容被视为一个独立的子表达式,可以通过索引(例如group(1))或名称来获取匹配的内容。

  3. 回溯引用:可以在同一个正则表达式中引用先前捕获的内容,从而实现更复杂的模式匹配。

请注意,括号本身并不匹配任何字符,而是用来指示正则表达式引擎对其中的内容进行处理。

所以,匹配之后可以通过索引方式group(1)获取捕获组中的内容。这样就可以拿到[]中的数字

5.总结

①java中反斜线的说明

在Java中,反斜杠\在字符串中被用作转义字符。转义字符指的是由反斜杠跟着一个字符组成的字符序列,表示特殊字符或控制字符。当反斜杠后面跟着某些字符时,它们会组成特定的转义序列,代表一些特殊意义的字符。常见的转义字符包括\n(换行符)、\t(制表符)、\\(反斜杠自身)、\'(单引号)和\"(双引号)等。

例如,如果你想在字符串中表示一个双引号字符",你可以使用转义字符\,即\",来告诉编译器将"视为普通字符而不是字符串结束符。

需要注意的是,因为反斜杠本身是用作转义字符的,如果要在字符串中表示一个反斜杠字符本身,则需要写成\\,即两个反斜杠。这样编译器才能正确解释反斜杠字符。

②捕获组的使用

正则表达式中的()表示匹配其中的内容,例:

(alb) 匹配a或者b

并可以听过索引方式获取满足正则表达式的()中的内容

③?  *  +在正则中的含义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值