不可不习的利器——正则表达式
正则表达式,又称规则表达式, 英文Regular Expression。可以从字面上理解其大概的意思,描述规则的一种表达式,那么描述什么规则呢 描述字符串构成规则的一种表达式。这么理解也就可以了。

本片文章并不打算长篇介绍和总结正则表达式相关用法。只是简要记录一下我觉得需要注意的一些点,如果你想要系统地学习正则表达式,你可以看一些书籍。或者找一些写的比较全的博文看一下。这里我推荐我觉得写的比较好的两篇文章,读完这两篇文章,写几个例子自己试一下,也就可以入门了。

文章一(强烈推荐):正则表达式语法及入门教程
文章二:Pattern类与Matcher类详解
文章三:Java正则表达式的语法与示例
【值得注意的一点,参考文章可能针对不同语言作描述,不同语言正则表达式书写可能有些许差异,但是思想是一样的,或者说你能立刻理解这些差异,例如反斜杠在Java中的特殊性,导致在书写正则表达式时要做转义:\b   ---->   \\b 等】

首先,必须记住的一些元字符(随便怎么叫,记住就行)
.           匹配除换行符以外的任意字符
^           匹配字符串的开始
$           匹配字符串的结束
\b           匹配单词的开始或结束
\d           匹配数字           等同 [0-9]
\s           匹配任意的空白符
\w           匹配字母或数字或下划线或汉字


常见限定符
*              重复 0 次或更多次
+             重复 1 次或更多次
            重复 0 次或 1 次
{n}          重复 n 次
{n, }        重复 n 次或更多次
{n, m}     重复 n 到 m 次


常用反义代码
\B           匹配不是单词开头或结尾的位置
\S           匹配任意不是空白符的字符
\D           匹配任意非数字的字符
\W          匹配任意不是字母,数字,下划线,汉字的字符
[^x]         匹配任意不是 x 的字符
[^xyz]      匹配除了xyz这几个字符之外的字符


还有一个分组概念,用括号()区分:
组 0 其实是整个正则表达式。组 1 及其之后的按括号匹配,如正则表达式形式: A(B(C)(DE(F)))G
group 0 : A(B(C)(DE(F)))G
group 1 : (B(C)(DE(F)))
group 2 : (C)
group 3 : (DE(F))
group 4 : (F)


当然,如果你直接在整个正则表达式套上括号:(A(B(C)(DE(F)))G), 那么 group 1 就是(A(B(C)(DE(F)))G), 等同于 group 0。

说了这些,说说正则表达式常用的地方:
(1)、字符串格式检测(匹配) (matches)
(2)、字符串分割    (split)
(3)、获取字符串    (find)
(4)、字符串替换    (replaceAll)


写个简单的demo测试一下(2,3,4):
package org.devsong;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegExp {

    public static void main(String[] args) {
        String str = "Ab1.Cd2.Ef3.Gh";
        
        /****************字符串分割***************/
        String[] strArr = str.split("\\d\\.");
        for(String s : strArr) {
            System.out.print(s + "  ");
        }
        System.out.println("");
        
        /****************获取字符串***************/
        Pattern pattern = Pattern.compile("(\\w(\\d\\.)\\w)");  //编译regex:(\\w(\\d\\.)\\w)
        Matcher matcher = pattern.matcher(str); 
        while(matcher.find()) {
            //group: -整个正则表达式-         group 0 对应的是整个正则表达式的匹配结果,                               
            //       -(\\w(\\d\\.)\\w)-     group 1 代表的是第 一 对括号中正则表达式的匹配结果,             
            //       -(\\d\\.)-             group 2 代表的是第 二 对括号中正则表达式的匹配结果,... ... 依此类推
            //* 由于本例中整个正则表达式外围显式地套了一层括号,所以group 0 和group 1 输出结果是一致的
            //* 另外,group 2 在此例中对应的就是 \\d\\. 匹配的内容
            System.out.print(matcher.group(2) + "  ");
            //group(0)输出: b1.C  d2.E  f3.G  
            //group(1)输出: b1.C  d2.E  f3.G  
            //group(2)输出: 1.  2.  3.  
            
        }
        System.out.println("");
        
        /****************字符串替换***************/
        System.out.println(str.replaceAll("\\d\\.", "-"));
    }
    
}
以上代码输出结果:
Ab  Cd  Ef  Gh  
1.  2.  3.  
Ab-Cd-Ef-Gh

以上只说了一些常用的基本点,还有很多特性没有提到。上面提到的文章都做了比较详细的解说,特别是第一篇,强烈推荐。
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门