首页IT科技正则表达式15个常用实例(正则表达式)

正则表达式15个常用实例(正则表达式)

时间2025-07-18 11:55:40分类IT科技浏览3899
导读:整理自B站 廖雪峰老师的正则表达式课程。 正则表达式的概述...

整理自B站 廖雪峰老师的正则表达式课程             。

正则表达式的概述

什么是正则表达式?

正则表达式可以用字符串来描述规则             ,并用来匹配字符串                      。

正则表达式是字符串        。

用字符描述规则                      ,匹配字符          。

用正则表达式的好处:

一个正则表达式就是一个描述规则的字符串                     。

只需要编写正确的规则        ,就可以让正则表达式引擎去判断目标字符串是否符合规则            。

正则表达式是一套标准          ,可以用于任何语言       。

jdk的内置正则表达式引擎:java.util.regex

匹配方向:

从左到右按规则匹配

匹配规则:

&:精确匹配:“a\&c                ” 精确匹配ac

用. 来匹配任意一个字符                    。 “a.c                     ” abc aac acc等

\d: 来匹配数字: “00\d      ”

\w :可以匹配一个字母                     ,数字或下划线:“java\w            ” 不能匹配#和空格                。

\s: 可以匹配一个空格字符    。“a\sb                      ”

\D:可以匹配任意一个非数字的符号(包括#)                    。         ”00\D        ”

\W: 非字母            ,数字下划线;“java\w                       ” 可能是 java_

\S: 可以匹配一个非空白字符:            ”A\SB“ 可以是A&B ABB 不能是    ”A B“

*: 可以匹配任意0次或多次字符

+:可以匹配至少1字符                    。

?: 可以匹配零个或一个字符。“A?B                        ” 可以是A和B的任意字符                。

{n} : 表示匹配n个字符                       。                ”\d{6}” 匹配6个数字

{n,m}:表示匹配n到m个字符    。“\d{3,5}                    ”表示匹配3到5个数字

{n,}:至少n个字符             。

复杂的匹配规则:

加上^(开头)和$(结尾)会变得严谨       ,java默认只能做单行匹配                    ,可以不加                      。

[…]可以匹配范围内的字符:                    ”[abc]1   ” 表示abc中的一个 a1 b1 c1;

[a-f]1 表出a到f中的一个和1结合;[a-f0-9_]{6} 下划线和字母数字间没有顺序

[^…]:匹配[…]内除外的所有字符

AB|CD: AB或CD

learn\s(AB|CD): learn (空格)AB或者learn (空格)CD

案例:匹配5到10位的qq号

public static boolean isValidQQ(String s){ return s.matches("^[1-9]\\d{4,9}$"); }

分组匹配规则

(…)可以用来分组:

String.matches vs Pattern.mather

实际上是一样的                ,string的matches内部调用的就是pattern.mather

反复使用一个正则表达式进行快速匹配效率低下

可以把正则表达式字符串编译成pattern对象

Pattern pattern = Pattern.compile("^\\d{3,4}\\-\\d{6,8}$"); pattern.mather("010-12345678").matches(); //true //获取Match的对象: Matcher matcher = Pattern.matcher(String s); matcher.matches(); //true or false

使用Matcher.group(n)快速提取子串

String s = "010-123456"; Pattern pattern = Pattern.compile("^(0\\d{2,3})-([1-9]\\d{5,7})"); Matcher matcher = pattern.matcher(s); if(matcher.matches()){ String s0=matcher.group(0); //表示获取全部字符        。 String s1=matcher.group(1); String s2=matcher.group(2); System.out.println(s1); System.out.println(s2); }

贪婪匹配和非贪婪匹配

正则表达式的贪婪匹配

默认是贪婪匹配    ,就是在匹配时尽可能多地向后匹配          。

非贪婪匹配

String s="9999"; Pattern pattern = Pattern.compile("^(\\d??)(9*)$"); Matcher m = pattern.matcher(s); if(m.matches()){ String s1 = m.group(1); String s2 = m.group(2); System.out.println(s1); System.out.println(s2); }

提取                    ,搜索及替换

提取的例子

String[] String.split(String regex);

String s = "a#b;;c, 1234;5;"; String[] str = s.split("[\\,\\#\\s+\\;]+"); for (String s1 : str) { System.out.println(s1);

搜索的例子

Matcher.find();

public static void main(String[] args) { String s = "the good things hello"; Pattern p = Pattern.compile("the",Pattern.CASE_INSENSITIVE); //忽略大小写 \\ \\w+ 提取每一个单词 \\w*o\\w* 带有o的单词 Matcher m = p.matcher(s); while (m.find()){ String sub = s.substring(m.start(),m.end()); System.out.println(sub); } }

替换

String.replaceAll();

public static void main(String[] args) { String s = "the quick brown fox jumps over the lazy dog."; String s1 = s.replaceAll("\\s+", " "); System.out.println(s1); //再将s1的内容加粗体处理 String s2 = s1.replaceAll("(\\w+)", "<b>$1</b>"); System.out.println(s2); }

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python怎么读(python中pyg2plot如何使用?)