正则表达式30分钟入门系列之9

2025-10-27 03:30:02

1、正则表达式中关于或的关系,已经讲过了一个关键字“[]”。

放在"[]"这个范围中的字符之间是或的关系,只要满足一个即为匹配。

在实际处理字符串时,有这种场景,就是“字符串之间或的关系”

这种关系在正则表达式中怎么表达呢?

用关键字"|"

"|":这个关键字表示--与关键字"|"相邻的正则表达式之间是或的关系,只要满足其中一个即可。"|"关键字的作用边界由"("或"|"界定。

先来看看测试的脚手架代码:

Code:

package chapter4;

import java.util.Arrays;

import java.util.List;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegexStudyDemo {

   public static void main(String[] args) {

       String regexStr = "Hello!|Hello汉字!";

       List<String> input = Arrays.asList("Hello!", "Hello汉字!", "Hello三汉字!");

       System.out.println(isMatch(input, regexStr));

   }    private static boolean isMatch(List<String> inputs, String regexStr) {

       boolean result = true;

       Pattern pattern = Pattern.compile(regexStr);

       for (String input : inputs) {

           Matcher matcher = pattern.matcher(input);

           if (matcher.matches()) {

               continue;

           }

           System.out.println(String.format("%s is not match  %s", regexStr, input));

           result = false;

       }

       return result;

   }

}

正则表达式30分钟入门系列之9

2、根据对关键字"|"的描述

"Hello!|Hello汉字!"不会匹配字符串"Hello三汉字!"

执行下看看结果

Output:

Hello!|Hello汉字! is not match  Hello三汉字!

false

与预期一致

OK

正则表达式30分钟入门系列之9

3、做过CleanCode的tx有没有发现,上面的正则表达式"Hello!|Hello汉字!",是不是有重复,譬如"Hello"和"!"是重复的

去下重复,更改下代码

Code:

String regexStr = "Hello(汉字|)!";

List<String> input = Arrays.asList("Hello!", "Hello汉字!", "Hello三汉字!");

正则表达式30分钟入门系列之9

4、上面的变更只是对,正则表达式的形式进行变更,

效果应该不会发生变化

执行下看看结果

Output:

Hello(汉字|)! is not match  Hello三汉字!

false

与预期一致

Ok

正则表达式30分钟入门系列之9

5、细心的同学已经发现

其实上面的两个例子,已经诠释了|和()的用法

理解"|"的作用域很重要,

第一个正则表达式 "Hello!|Hello汉字!"中没有关键字"()"

因此,是字符串“Hello!”和“Hello汉字!”之间是或的关系

第二个正则表达式 "Hello(汉字|)!",关键字“|”外面有关键字“()”,因此关键字“()”左右两边的字符串“Hello”和“!”就不受关键字”|“影响

 正则表达式"Hello!|Hello汉字!"和 "Hello(汉字|)!"比较特殊,可以使用关键字”?“进行改造。

更改下代码

Code:

String regexStr = "Hello(汉字)?!";

List<String> input = Arrays.asList("Hello!", "Hello汉字!", "Hello三汉字!");

正则表达式30分钟入门系列之9

6、执行下看看结果

Output:

Hello(汉字)?! is not match  Hello三汉字!

false

与预期一致

OK

正则表达式30分钟入门系列之9

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢