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

2025-10-27 00:11:17

1、前面讲的正则表达式的关键字,大多是匹配一个字符

现实的应用中,肯定都是比一个字符多的,这些场景怎么表示呢

这个问题前面已经提到过,“*”这个表示数量的关键字,表示“*”号前面的字符串重复0次或无限次

有时候我就需要重复11次就可以,譬如匹配电话号码

此时关键词“*”就不满足要求了

现在就来介绍下表示字符串数量方面的其它关键字

+:这个关键字表示这样的数量--“*”前面的字符可以重复1次或无限次

?:这个关键字表示这样的数量--“?”前面的字符可以重复0次或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[\\w\\W]!";

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

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

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

       boolean result = true;

       for (String input : inputs) {

           Pattern pattern = Pattern.compile(regexStr);

           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分钟入门系列之7

2、解析一下代码

[\\w\\W]:这个正则表达式中只代表一个字符

上面的代码中,Hello和!之间的字符都大于1个,

 "Hello[\\w\\W]!"都不能匹配

执行下看看结果

Output:

Hello[\w\W]! is not match  Hello汉字!

Hello[\w\W]! is not match  Hello  !

Hello[\w\W]! is not match  Hello  !

Hello[\w\W]! is not match  Hello787

false

与预期一致

OK

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

3、把"Hello[\\w\\W]!"这个正则表达式怎么改改,让正则表达式能够匹配上面的字符串

细心的tx已经想起上面提到的关键字“+”

好,更改下代码

Code:

String regexStr = "Hello[\\w\\W]+!";

List<String> input = Arrays.asList("Hello汉字!", "Hello  !", "Hello  !", "Hello787!");//更改这一行,是因为最后一个字符串忘记写"!"了

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

4、按上面的解析,加上“+”这个关键字后,刚才不被匹配的字符串,应该都可以被成功匹配

执行一下,看看结果

Output:

true

与预期一致

OK

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

5、"?"这个关键字,还没有讲到呢

是的,前面讲到的关键字都是要匹配某种特定形态的字符,

还有一种场景,就是可能存在或不存在某种特定形态的字符

这种场景就是“?”关键字发挥作用的场景了

更改下代码:

String regexStr = "Hello[\\w\\W]?!";

List<String> input = Arrays.asList("Hello汉!", "Hello!", "Hello\n!", "Hello\r!");

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

6、按照上面的分析,更改后的正则表达式已经能匹配到,上面列的所有字符串

执行下,看看结果

Output:

true

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

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