多语言展示
当前在线:1231今日阅读:23今日分享:25

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

正则表达式也是一种语言,在解析字符串领域独领风骚。本文分享关于正则表达式中最常用的关键字()和|的用法
工具/原料
1

IntelliJ IDEA

2

Java

3

Regular expressions

方法/步骤
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 input = Arrays.asList('Hello!', 'Hello汉字!', 'Hello三汉字!');        System.out.println(isMatch(input, regexStr));    }    private static boolean isMatch(List 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;    }}

2

根据对关键字'|'的描述'Hello!|Hello汉字!'不会匹配字符串'Hello三汉字!'执行下看看结果Output:Hello!|Hello汉字! is not match  Hello三汉字!false与预期一致OK

3

做过CleanCode的tx有没有发现,上面的正则表达式'Hello!|Hello汉字!',是不是有重复,譬如'Hello'和'!'是重复的去下重复,更改下代码Code:String regexStr = 'Hello(汉字|)!';List input = Arrays.asList('Hello!', 'Hello汉字!', 'Hello三汉字!');

4

上面的变更只是对,正则表达式的形式进行变更,效果应该不会发生变化执行下看看结果Output:Hello(汉字|)! is not match  Hello三汉字!false与预期一致Ok

5

细心的同学已经发现其实上面的两个例子,已经诠释了|和()的用法理解'|'的作用域很重要,第一个正则表达式 'Hello!|Hello汉字!'中没有关键字'()'因此,是字符串“Hello!”和“Hello汉字!”之间是或的关系第二个正则表达式 'Hello(汉字|)!',关键字“|”外面有关键字“()”,因此关键字“()”左右两边的字符串“Hello”和“!”就不受关键字”|“影响 正则表达式'Hello!|Hello汉字!'和 'Hello(汉字|)!'比较特殊,可以使用关键字”?“进行改造。更改下代码Code:String regexStr = 'Hello(汉字)?!';List input = Arrays.asList('Hello!', 'Hello汉字!', 'Hello三汉字!');

6

执行下看看结果Output:Hello(汉字)?! is not match  Hello三汉字!false与预期一致OK

推荐信息