正则表达式基础个人学习笔记

掌握正则表达式:从基础到实用示例 本文介绍了正则表达式在Java编程中的基本概念和应用。首先,简要解释了正则表达式的语法规则,随后通过具体示例展示了如何在Java中使用正则表达式进行模式匹配、字符串替换和数据验证。通过理解和掌握正则表达式,开发者可以高效地处理复杂的字符串操作,提高代码的灵活性和可读性。希望本文能为读者提供有价值的参考,助力在实际开发中更好地利用正则表达式。 阅读详情

零、简介

正则表达式,常常缩写为 “regex” 或 “regexp”,是帮助程序员匹配、搜索和替换文本的模式。正则表达式非常强大,但可能难以阅读,因为它们使用特殊字符来做更复杂更灵活的匹配。 

一、方法

①test方法

test方法用于检测一个字符串是否匹配某个正则表达式模式。如果字符串 str 中包含与正则表达式 regexObj 匹配的文本,则返回 true;否则返回 false。

regex.test(str);

regex:一个正则表达式对象,它定义了要匹配的模式。可以使用正则表达式字面量或 RegExp 构造函数来创建。
str:要进行检测的字符串。

如果需要匹配多个字符串,只需在正则表达式里用|分隔,即:

const regex = /pattern1|pattern2|...|patternN/;

如果需要不区分大小写进行匹配,需要在正则表达式后添加i修饰符,即:

const regex = /pattern/i;

②match方法

match方法用于在字符串中查找匹配正则表达式的内容。

str.match(regexp);

如果需要让正则表达式在目标字符串中进行全局搜索,找到所有匹配的结果,而不是在找到第一个匹配项后就停止搜索,可以使用全局搜索标志g修饰符来遍历整个字符串,找出所有符合模式的部分。即:

const regex = /pattern/g;

我们之前学过i修饰符,如果想添加多个标志,可以让修饰符组合使用,即:

const regex = /pattern/gi;

③通配符应用

通配符是一种在文本处理、文件搜索、正则表达式等场景中广泛使用的特殊字符,它可以代表一个或多个其他字符,从而实现更灵活的匹配。

1. 点号

有时不知道匹配模式中的确切字符。 如果要精确匹配到完整的单词,那出现一个拼写错误就会匹配不到。 幸运的是,可以使用通配符 . 来处理这种情况。

点号匹配除换行符之外的任意单个字符。比如

const regex = /h.t/;
console.log(regex.test('hat')); // true
console.log(regex.test('hot')); // true
console.log(regex.test('h t')); // true

2.方括号

在精准匹配和匹配所有的两个极端下,方括号是平衡选项,通过定义字符类,它能让你匹配方括号内指定的任意一个字符。比如:

const regex = /[abc]/;
console.log(regex.test('a')); // true
console.log(regex.test('b')); // true
console.log(regex.test('c')); // true
console.log(regex.test('d')); // false

3.连字号

有时需要匹配大量字符,连字符处于方括号内部时,可用于定义连续的字符范围。比如,[a-z] 代表任意小写字母,[A-Z] 代表任意大写字母,[0-9] 代表任意数字,[a-zA-Z0-9] 能够匹配任意字母(大写或小写)以及数字,[ - ~] 可匹配 ASCII 码表中从空格(十进制 32)到波浪号(十进制 126)之间的任意字符。

4.脱字符

当脱字符(^)位于方括号([])内的开头位置时,它用于创建一个排除字符类。这意味着正则表达式会匹配除了方括号内指定字符之外的任意字符。比如:

// 匹配除数字 0 - 9 之外的任意字符
const nonDigitRegex = /[^0-9]/;
console.log(nonDigitRegex.test('a')); // true
console.log(nonDigitRegex.test('5')); // false

同理还可以匹配字符串开头:

// 匹配以 "hello" 开头的字符串
const regex = /^hello/;
const str1 = "hello world";
const str2 = "say hello";

console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // false

5.加号

有时,需要匹配出现一次或者连续多次的的字符(或字符组)。 这意味着它至少出现一次,并且可能重复出现。正则表达式中,+ 紧跟在需要重复匹配的元素之后,表示该元素至少出现一次,没有上限。比如:

// 匹配一个或多个连续的 'a'
const regex = /a+/;

console.log(regex.test('a')); // true
console.log(regex.test('aa')); // true
console.log(regex.test('b')); // false

6.星号

和加号相反,星号用来指定前面的元素可以出现零次或多次。正则表达式中,星号紧跟在需要匹配的元素之后,比如:

// 匹配零个或多个连续的 'a'
const regex = /a*/;

console.log(regex.test('')); // true
console.log(regex.test('a')); // true
console.log(regex.test('aa')); // true
console.log(regex.test('b')); // true

7.惰性匹配

在正则表达式中,贪婪(greedy)匹配会匹配到符合正则表达式匹配模式的字符串的最长可能部分,并将其作为匹配项返回。 另一种方案称为懒惰(lazy)匹配,它会匹配到满足正则表达式的字符串的最小可能部分。在正则表达式中,量词(像 *、+这类符号)默认采用贪婪匹配策略。这意味着它们会尽可能多地匹配满足条件的字符,直至无法再匹配为止。而惰性匹配则恰恰相反,它会尽可能少地匹配字符,一旦找到第一个符合条件的匹配结果就会停止。

要实现惰性匹配,只需在量词后面加上问号(?)即可。

8.美元符号

我们知道脱字符^可以用来匹配字符串开头,如果想要匹配字符串结尾,可以使用正则表达式的美元符号 $ 来搜寻字符串的结尾。当美元符号($)出现在正则表达式的末尾时,它表示匹配必须在字符串的结尾处发生。也就是说,正则表达式所定义的模式要一直匹配到字符串的最后一个字符才算匹配成功。比如:

// 匹配以 "world" 结尾的字符串
const regex = /world$/;
const str1 = "hello world";
const str2 = "hello world!";

console.log(regex.test(str1)); // true
console.log(regex.test(str2)); // false

9.\w和\W

我们在连字号那里提及过[a-zA-Z0-9] 能够匹配任意字母(大写或小写)以及数字,而短语元字符\w等同于[A-Za-z0-9_]。 此字符类匹配大写字母和小写字母以及数字。 注意,这个字符类也包含下划线字符 (_)。

与 \w 相反,\W 是匹配非单词字符的元字符,也就是除了字母、数字和下划线之外的任何字符。它是 [^a-zA-Z0-9_] 的缩写。

10.\d和\D

同样地,查找数字字符的缩写是 \d,这等同于元字符 [0-9],它查找 0 到 9 之间任意数字的单个字符。

查找非数字字符的缩写是 \D。 这等同于字符串 [^0-9],它查找不是 0 - 9 之间数字的单个字符。

11.\s和\S

\s主要用于匹配空白字符,即匹配空格符、制表符(\t)、换行符(\n)、回车符(\r)、垂直制表符(\v)、换页符(\f),等价于字符类 [ \t\n\r\v\f]。

同理,使用 \S 搜寻非空白字符。 此匹配模式将不匹配空格、回车符、制表符、换页符和换行符。 可以认为这类似于元字符[^\t\n\r\v\f]。

12.花括号

花括号作为数量说明符,用于精确或范围性地指定前面元素(字符、字符类、分组等)的出现次数。有以下几种常见的使用形式:

固定次数 {n}:表示前面的元素必须恰好出现 n 次。

至少出现次数 {n,}:表示前面的元素至少要出现 n 次,出现次数可以是 n 次及以上的任意次数。

出现次数范围 {n,m}:表示前面的元素出现的次数最少为 n 次,最多为 m 次(n 和 m 均为非负整数,且 n <= m)

13.问号

问号除了将数量说明符从贪婪匹配模式转变为非贪婪匹配模式,还可以指定可能存在的元素,用于表示前面的元素出现零次或一次,即该元素是可选的。比如:

const regex = /colou?r/;
console.log(regex.test('color'));  // true
console.log(regex.test('colour')); // true

14.括号

在正则表达式里,括号可以分组。有时候我们想使用正则表达式里的括号 () 来检查字符组。使用圆括号 () 可以将其中的内容组合成一个整体,这个整体被视为一个独立的单元,可对其应用各种正则操作,如量词限定、分支选择等。

// 正则表达式,用于匹配 123 或 456
let numberRegex = /(123|456)/;
// 待检查的字符串
let testStr4 = "The code is 123.";
let testStr5 = "Another code could be 456.";
let testStr6 = "No such code here.";

// 使用 test() 方法检查字符串中是否包含匹配项
console.log(numberRegex.test(testStr4)); // true
console.log(numberRegex.test(testStr5)); // true
console.log(numberRegex.test(testStr6)); // false

④断言

在正则表达式中,断言用于检查在某个位置的前后是否满足特定的条件,但并不实际消耗匹配的字符,也就是说断言只做位置的判断,不会将匹配的内容包含在最终的匹配结果里。常见的断言类型有先行断言、后行断言、负向先行断言和负向后行断言:

1.正向先行断言

要求在当前位置的后面必须匹配 pattern 模式,但 pattern 部分不会包含在最终的匹配结果中。

语法:(?=pattern)

const str = 'a1b2c3';
const regex = /[a-zA-Z](?=\d)/g;
const matches = str.match(regex);
console.log(matches); // 输出: [ 'a', 'b', 'c' ],表示匹配成功

2.负向先行断言

要求在当前位置的后面不能匹配 pattern 模式。

语法:(?!pattern)

const str = 'a1b c2';
const regex = /[a-zA-Z](?!\d)/g;
const matches = str.match(regex);
console.log(matches); // 输出: [ 'b' ],表示匹配成功

3.正向后行断言

要求在当前位置的前面必须匹配 pattern 模式,但 pattern 部分不会包含在最终的匹配结果中。

语法:(?<=pattern)

const str = '100 $200';
const regex = /(?<!\$)\d+/g;
const matches = str.match(regex);
console.log(matches); // 输出: [ '100' ],表示匹配成功

4.负向后行断言

要求在当前位置的前面不能匹配 pattern 模式。

语法:(?<!pattern)

const str = '100 $200';
const regex = /(?<!\$)\d+/g;
const matches = str.match(regex);
console.log(matches); // 输出: [ '100' ],表示匹配成功

⑤捕获组

当想要匹配一个多次出现的单词而不知道重复的特定单词,可以使用捕获组。

捕获组是通过在正则表达式里使用圆括号 () 来定义的,被括号包围的部分所匹配到的文本会被存储起来,每个捕获组都会被分配一个编号,编号从 1 开始,按照左括号出现的顺序依次递增,编号为 0 的捕获组表示整个正则表达式匹配的结果。

// 定义包含重复单词的字符串
const str = 'apple apple banana';
const regex = /(\w+) \1/;// 定义正则表达式,用于匹配重复单词,(\w+) 捕获单词,\1 引用该单词
const result = regex.test(str);
console.log(result);// 由于字符串中存在重复单词 "apple apple",所以此处会输出 true

⑥replace方法

replace() 方法是字符串对象的一个常用方法,用于在字符串中替换匹配到的子字符串。它可以结合正则表达式或者普通字符串来进行替换操作

str.replace(regexp|substr, newSubstr|function)

regexp|substr:可以是一个正则表达式对象,也可以是一个要被替换的普通字符串。
newSubstr|function:可以是一个用于替换匹配项的新字符串,也可以是一个回调函数,该回调函数会对每个匹配项进行处理并返回替换值。

返回一个新的字符串,其中匹配的部分已经被替换,原字符串不会被修改。

RegexTest:正则表达式测试 RegexTest 正则表达式测试工具 for Android 立即下载

相关推荐

对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理:

故障诊断,对西安交大轴承数据集XJTU-SY_Bearing_Datasets进行读取和处理

qq_44757503的博客 6060

JavaScript中RegExp的test方法详解

RegExp.prototype.test() ** RegExp.prototype.test()方法为指定正则表达式和指定字符串执行一次匹配,返回true或false。** var regex1 = RegExp('foo*'); var regex2 = RegExp('foo*','g'); var str1 = 'table football'; console.log(regex1....

大菜鸟的博客 1万+

从转发时钟到嵌入式时钟:CDR、CTLE与DFE在高速串行链路中的协同演进

本文深入探讨了高速串行链路中CDR、CTLE与DFE技术的协同演进。从转发时钟到嵌入式时钟的转变,详细分析了CDR的工作原理与实现架构,以及CTLE和DFE在信道损耗补偿和ISI干扰消除中的关键作用。通过实战案例展示了这些技术在28Gbps至112Gbps SerDes设计中的优化策略与性能提升。

weixin_42539414的博客 294

JS正则表达式RegExp.test(),第一次true,第二次false

RegExp.test()异常分析 现象 代码如下: var a= /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/g a.test('192.168.1.1') // true a.test('192.168.1.1') // false 如上的代码,第一次测试返回true,第二次以及之后的调用都会返回false。 原因 这是因为RegExp.test()方法,第一次从位置0开始查找,可以匹配;第二次的查找位置就不是0了,说以就不能匹配了(这个原因是aitangyong说的,

AS_JOPO的专栏 1657

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

Nginx健康检查实战:如何用第三方模块提升服务可用性(附详细配置)

本文深入探讨了如何通过集成第三方健康检查模块来提升Nginx的服务可用性。文章对比了Nginx默认被动检查的局限性,并详细介绍了主动健康检查的核心优势、主流模块选型,以及以nginx_upstream_check_module为例的实战部署与配置指南,帮助运维人员构建更可靠的负载均衡架构。

weixin_28331555的博客 307

正则的扩展详解

正则的扩展,RegExp()、正则修饰符、具名组匹配以及解构赋值和替换、组引用、正则的索引位。

分享互联网的有趣知识~ 1119

RDM协议控制端实战:从数据包构造到高效设备发现算法

本文深入探讨了RDM协议控制端的核心开发流程,涵盖从数据包构造、发送到响应解析的全过程。重点解析了如何利用二分搜寻算法高效实现网络设备发现,并分享了组包、解包中的关键代码实现与常见调试技巧,为舞台灯光与智能硬件领域的嵌入式开发提供实战指导。

week9的博客 457

正则表达式test()方法

正则表达式中的 test() 方法用来检测一个字符串是否匹配某个正则表达式 test() 方法的具体格式如下: regexp.test(string) regexp 表示正则表达式对象,参数 string 表示要检测的字符串。如果字符串 string 中含有与 regexp 正则表达式匹配的文本,则返回 true;否则返回 false。 示例1 在下面示例中,使用 test() 方法检测字符串中是...

CKT0816的博客 6890

别再傻傻分不清!Synopsys DC综合中link/target/symbol/synthetic四大库的保姆级配置指南

本文详细解析了Synopsys DC综合中link_library、target_library、symbol_library和synthetic_library四大库的配置方法,帮助工程师避免常见错误。通过实战示例和调试技巧,指导如何正确设置工艺库与IP库,提升数字芯片设计效率。

weixin_42562079的博客 423

VTK-9.5.0 1D2D3DWidget实现灰度图+深度图+3D点云显示(可轻松集成到自己的项目)

VTK1D2D3DWidget是一个基于Qt和VTK开发的3D点云可视化工具,支持RGB和深度点云数据的显示与处理。主要功能包括点云加载、可视化、保存为PLY格式文件,以及背景颜色、点间隔、坐标轴显示等参数的自定义设置。该工具采用模块化设计,核心组件包括主窗口管理类、VTK渲染组件和自定义鼠标交互样式,依赖Qt5+和VTK9.5.0库实现跨平台支持。项目提供完整的源码和构建指南,适用于点云数据的快速展示与分析。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 385

正则表达式基础

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

工匠若水 1万+

将Windbg附加到软件进程上排查异常闪退的问题

使用Windbg和Process Explorer排查因为内存泄漏导致的软件异常闪退问题。

dvlinker的技术专栏 1万+

python基础——正则表达式

正则表达式(Regular Expression)是一种用于处理字符串的强大工具,它可以用来检查字符串是否符合某种模式、提取字符串中的特定部分或者替换字符串中的某些内容。比如在某些场景,我们在输入邮箱的时候,如果我们的输入不符合邮箱地址的规则,则会被提示错误输入。●match(): 从字符串的开头开始匹配,如果开头不匹配则返回None。匹配成功则返回第一个匹配项(包含信息),匹配失败则返回None●search(): 在字符串中搜索与正则表达式匹配的子字符串,返回第一个匹配项(包含信息),失败返回。

tan_run的博客 2668

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python个人学习基础笔记-2.正则表达式

正则表达式(Regex)用来查找和匹配字符串中的模式。可以把它看作是一种“搜索”工具,帮助找到特定的字符或字符串,表1给出一些常见的特殊字符应用:表1 特殊字符在正则化表达式的应用匹配除换行符以外的任何单个字符\d匹配任何数字字符\D匹配任何非数字字符\w匹配任何字母数字字符(包括下划线)\W匹配任何非字母数字字符(不包括下划线)\s匹配任何空白字符(包括空格、制表符、换行符等)\S匹配任何非空白字符匹配字符串的开始位置匹配字符串的结束位置匹配前面的字符0次或多次。

Wty030226的博客 1181

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Python个人学习笔记(19):模块(正则表达式)

正则表达式是单独的一门语言,利用表达式的形式匹配字符串里面的内容。最好在线写正则表达式,效率高语法:普通字符:类似abcdefg元字符:具有特殊意义的符号(关键字)作用:用表达式的形式来匹配字符串只有连续的才能匹配。

NEET_LH的博客 1135

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

正则表达式 个人小结

正则表达式 总结笔记 基础正则语法 ^ 匹配字符串的开始 $ 匹配字符串的结束 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 懒惰限定符 *? 重复任意次,但尽可能少...

LYK_lalalala的博客 375

[python爬虫] 正则表达式使用技巧及爬取个人博客实例

这篇博客是自己《数据挖掘与分析》课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站。希望这篇基础文章对您有所帮助,如果文章中存在错误或不足之处,还请海涵。真的太忙了,太长时间没有写博客了,抱歉~ 一.正则表达式 二.正则表达式抓取网络数据常见方法 1.抓取标签间的内容 2.抓取标签中的参数 三.实战

杨秀璋的专栏 4万+

【正则表达式】以个人的理解帮助大家认识正则表达式

正则表达式学习心得 前言     一个学习笔记居然会有前言?没错,这个是额外增加的,显得专业一点。     提起正则表达式,不知道大家第一印象是什么,可能是强大好用也可能是晦涩难懂。正则表达式在文本处理中相当重要,各大编程语言中均有支持,但可能使用起来有细微的差别,该学习笔记中元字符介绍一节不特定于某一个编程语言,旨在简要描述正则本身的基本用法。     前言中先阐述一下正则表达式到底是个什么东...

shifengboy的博客 392

linux正则表达式,正则表达式分类,元字符,基础正则表达式,扩展正则表达式,正则表达式案例

上文介绍了通配符1,本文介绍、总结和通配符有着诸多共同点的一类符号,即正则表达式(regular expression)。只是通配符的对象是文件、或目录,而后者对象是文本内容。在很多地方都有正则表达式的身影,它的作用是用来匹配指定式样的内容,个人理解为,正则表达式规定了指定式样pattern,能匹配该指定式样的字符或字符串即为内容,内容的来源可以是文件、某个标准输入等,使用正则表达式(regular expression)的目的就是匹配到了该内容。

有人说学习`这个`最好的时间是十年前,有人说最好的时间是现在,众说纷纭... 1821

python正则表达式学习笔记(个人总结)

python正则表达式学习笔记 个人学习笔记和总结 作者:YRH 时间:2020.08.09 1.正则表达式匹配符 匹配符 功能 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于[\t\n\r\f]. \d 匹配任意数字,等价于[0-9] \D 匹配任意非数字 \A 匹配字符串开始 \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符 \z 匹配字符串结束 \G 匹配最后匹配完成的位置 \n 匹配一个换行符

weixin_45066966的博客 450

【学习笔记】爬虫(Ⅱ)—— 正则表达式 Re

爬虫第二部分:正则表达式

Eddie_hyh的博客 1078

正则表达式学习笔记

正则表达式学习笔记。

1853 1407

【JS】JavaScript正则表达式基础

目录一、正则表达式二、字符串使用正则表达式三、常用例子 一、正则表达式 关于正则表达式,我在另一篇博客记录过:正则表达式 二、字符串使用正则表达式 三、常用例子

小绵杨 2208

JAVA 正则表达式 个人地址脱敏

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1JAVA 正则表达式 个人地址脱敏 在当今信息化的社会中,个人隐私愈发受到重视,尤其是地址等敏感信息的处理。本文将指导刚入行的小白如何使用JAVA的正则表达式来实现个人地址的脱敏。我们将分...

weixin_32331453的博客 649

Shell 脚本正则表达式(一)(2)

总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》总的来说,面试是有套路的,一面基础,二面架构,三面个人。最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友[外链图片转存中…(img-rVAfJTN7-1714653031125)]

2401_83916283的博客 1081
上一篇: JavaScript数组和对象基础个人学习笔记
下一篇: LeetCode_[88. 合并两个有序数组]
森雨Senyu
博客等级 码龄2年 166粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值