Skip to content
Go back

正则表达式

Edit page

正则表达式

正则表达式(regular expression)是一种描述字符串的一种匹配模式(pattern)的表达式。借助正则表达式我们可以检查输入的字符串中是否包含我们需要的子串,并进行替换等操作;

比如说我们需要完成如下任务:

对一行给定的字符串,去除中间不满足条件的分隔符。 例如输入字符串:I am an 20-years out--standing @ * -stu- dent 去除中间的除字母、数字的字符(保留两个字母之间的 -)。 输出:I am an 20-years out standing stu dent

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String S = input.nextLine();

        String S = s.replaceAll("((?<=\\W|\\D)-(?=\\W|\\D))", " ");

        S = S.replaceAll("[ ]{2,}", " ");
        System.out.println("S: " + S);
        String[] subs = S.split(" ");

        Deque<String> stack = new ArrayDeque<>();
        for(String elem : subs) {
            stack.push(elem);
        }

        String res = String.join(" ", stack);
        System.out.println(res);
}

Java 的 String.matches(regex, str) 方法,必须要整个字符串匹配这个模式才会返回 true 而不是 子串匹配即可,java doc 里面写了。

构成

正则表达式是由普通字符(a-z、0-9 等等)和特殊字符(元字符)构成文字模式(pattern),可以描述搜索文本时匹配一个或多个字串(模式中可以指定)。

匹配顺序

输入的字符串从左到右逐个字符地匹配正则表达式模式,匹配成功则会回到匹配成功的位置加一个字符去匹配,直到达到最长。默认的匹配模式就是像这样的贪心模式。

普通字符

普通字符包括可打印的(abcd1234 等等)和不可打印的(\n\t等等空格或换行字符)

特殊字符

特殊字符在正则表达式中具有特定的含义,如果其中有字符需要参与匹配的话,则需要通过反斜杠 \ 转义。

字符簇

字符簇代表了一簇可匹配的字符,但只能表示一个字符,配合限定符使用可以匹配多个字符模式;

[A-Z0-9] // 匹配一个大写字母或数字
[^0-9] // 匹配除数字以外的任意字符
[12][0-9]{3} // 匹配1000-2999范围内的数字
圆括号运算符
限定符
[a-z]? // 零次或一次
[a-z]* // 零次或多次
[a-z]+ // 一次或多次
[a-z]{0,2} // 0~2次
[a-z]{2} // 两次
[a-z]{2,} // 两次及以上
定位符
模式改变

? 紧跟在限定符后可以将匹配模式改为非贪婪的

一些有特别意义的匹配符

更多的元字符可以看菜鸟教程


Edit page
Share this post on:

Previous Post
微服务
Next Post
负载均衡