Java正则表达式持续更新

活到老学到老,正则就是学不好,学不好学不好,拿起笔笔把它记好!

Pattern.DOTALL

单行模式,同(?s)表达式,作用是更改(.)的含义,默认情况下(.)不会匹配换行符(\n),设置了Pattern.DOTALL模式就会匹配换行符(\n)。

默认不会匹配换行符(\n)

java 复制代码
public static void main(String[] args) {
        //表达式(.)默认不会匹配换行符(\n)
        Pattern pattern = Pattern.compile("<.+>");
        Matcher matcher = pattern.matcher("<a href=\"index.html\">\n<a href=\"index.html\">");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串
替代字符串

设置Pattern.DOTALL模式后,表达式(.)会匹配换行符(\n)

java 复制代码
public static void main(String[] args) {
        //设置Pattern.DOTALL模式后,表达式(.)会匹配换行符(\n)
        Pattern pattern = Pattern.compile("<.+>",Pattern.DOTALL);
        Matcher matcher = pattern.matcher("<a href=\"index.html\">\n<a href=\"index.html\">");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串

Pattern.DOTALL模式也可以用(?s)代替,将(?s)加到正则表达式前面,表达式(.)会匹配换行符(\n)

java 复制代码
public static void main(String[] args) {
        //Pattern.DOTALL模式也可以用(?s)代替,将(?s)加到正则表达式前面,表达式(.)会匹配换行符(\n)
        Pattern pattern = Pattern.compile("(?s)<.+>");
        Matcher matcher = pattern.matcher("<a href=\"index.html\">\n<a href=\"index.html\">");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串
Pattern.MULTILINE

多行模式,同(?m)表达式,作用是匹配多行目标,例如(^)和($)默认情况下只匹配开始和结尾,设置了Pattern.MULTILINE模式后,如果字符串是多行内容,则会匹配每一行的目标。

表达式(^)($)默认情况下只匹配开始和结尾

java 复制代码
public static void main(String[] args) {
        //表达式(^)($)默认情况下只匹配开始和结尾
        Pattern pattern1 = Pattern.compile("^<");
        Pattern pattern2 = Pattern.compile(">$");
        Matcher matcher1 = pattern1.matcher("<aaaa>\n<bbbb>");
        Matcher matcher2 = pattern2.matcher("<aaaa>\n<bbbb>");
        System.out.println(matcher1.replaceAll("替代字符串"));
        System.out.println(matcher2.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串aaaa>
<bbbb>
<aaaa>
<bbbb替代字符串

设置Pattern.MULTILINE后,表达式(^)($)作用于多行

java 复制代码
public static void main(String[] args) {
        //设置Pattern.MULTILINE后,表达式(^)($)作用于多行
        Pattern pattern1 = Pattern.compile("^<",Pattern.MULTILINE);
        Pattern pattern2 = Pattern.compile(">$",Pattern.MULTILINE);
        Matcher matcher1 = pattern1.matcher("<aaaa>\n<bbbb>");
        Matcher matcher2 = pattern2.matcher("<aaaa>\n<bbbb>");
        System.out.println(matcher1.replaceAll("替代字符串"));
        System.out.println(matcher2.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串aaaa>
替代字符串bbbb>
<aaaa替代字符串
<bbbb替代字符串

Pattern.MULTILINE模式也可以用(?m)代替,将(?m)加到正则表达式前面,表达式(^)($)作用于多行

java 复制代码
public static void main(String[] args) {
        //Pattern.MULTILINE模式也可以用(?m)代替,将(?m)加到正则表达式前面,表达式(^)($)作用于多行
        Pattern pattern1 = Pattern.compile("(?m)^<");
        Pattern pattern2 = Pattern.compile("(?m)>$");
        Matcher matcher1 = pattern1.matcher("<aaaa>\n<bbbb>");
        Matcher matcher2 = pattern2.matcher("<aaaa>\n<bbbb>");
        System.out.println(matcher1.replaceAll("替代字符串"));
        System.out.println(matcher2.replaceAll("替代字符串"));
}

输出:

java 复制代码
替代字符串aaaa>
替代字符串bbbb>
<aaaa替代字符串
<bbbb替代字符串
Pattern.CASE_INSENSITIVE

忽略大小写,同(?i)表达式,顾名思义其作用就是忽略字母大小写。

java 复制代码
public static void main(String[] args) {
        //Pattern.CASE_INSENSITIVE模式忽略英文字母大小写
        Pattern pattern = Pattern.compile("a+",Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher("<aaAA>");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
<替代字符串>
(.+)

贪婪模式,最长跨度匹配,相当于先扫描全文再匹配。

java 复制代码
public static void main(String[] args) {
        //(.+)模式表示贪婪匹配,最长跨度匹配
        Pattern pattern = Pattern.compile("a.+c");
        Matcher matcher = pattern.matcher("<abcabc>");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
<替代字符串>
(.+?)

惰性模式,最小跨度匹配,相当于从全文开头扫描,命中一个算一个。

java 复制代码
public static void main(String[] args) {
        //(.+?)模式表示惰性匹配,最短跨度匹配
        Pattern pattern = Pattern.compile("a.+?c");
        Matcher matcher = pattern.matcher("<abcabc>");
        System.out.println(matcher.replaceAll("替代字符串"));
}

输出:

java 复制代码
<替代字符串替代字符串>
相关推荐
BruceXu3 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式
阿昭L4 天前
正则表达式
正则表达式·编译原理
波力海苔夹心脆6755 天前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
FRing036 天前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
小白快快跑哦8 天前
python-字符串全解(六):正则表达式-元字符与转义
python·正则表达式·字符串·元字符·转义
小白快快跑哦9 天前
python-字符串全解(六):正则表达式-逻辑运算或
python·正则表达式·字符串·逻辑运算
MoRanzhi120310 天前
106.正则问题(分治)
python·算法·正则表达式·蓝桥杯·递归·分治算法·字符串处理
临床数据科学和人工智能兴趣组11 天前
在R语言的生态系统中,字符串处理一直是一个重要且复杂的任务
开发语言·正则表达式·r语言·r语言-4.2.1
小白快快跑哦12 天前
python-字符串全解(六):正则表达式-前后相断言
开发语言·python·正则表达式·前后相断言
小白快快跑哦13 天前
python-字符串全解(六):正则表达式-修饰符
python·正则表达式·修饰符