首页技术正则表达式基本用法 正则表达式 点

正则表达式基本用法 正则表达式 点

编程之家2026-06-13856次浏览

老铁们,大家好,相信还有很多朋友对于正则表达式基本用法和正则表达式 点的相关问题不太懂,没关系,今天就由我来为大家分享分享正则表达式基本用法以及正则表达式 点的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

正则表达式基本用法 正则表达式 点

正则表达式高级用法

上一章分享了正式表达式的入门知识,以及单字符、多字符常用的匹配方法,对于工作维护过程中已经够用,但是有时候只使用基础知识来实现就会比较麻烦,如果使用高级用法就会比较方便很多。

例如:匹配一个HTML文件中两个<B>标签中的文件。

文本内容:

从上一章内容的知识可以想到的表达式可能如下:

但是这个表达式配置的结果是 AK</B> and<B>HI,而不是我们想要的 AK和 HI。

实现很简单,就是在原有“贪婪型”元字符后面加上一个?号,如下表格

正则表达式基本用法 正则表达式 点

前面的元字符都是对紧挨着前面的一个字符有效,例如表达式 the{3}匹配 theee字符串,假如我们想匹配连续三个 the字符串怎么办呢,这就涉及到子表达式的概念。

把一个表达式匹配的内容做为一个单独的元素嵌入到另外一个表达式中,那这个做为独立元素的表达式就是子表达式,需要使用()括起来。这个跟数学的表达式概念很类似。

并且子表达与数学表达式还有一个类似的地方就是,正则表达式的子表达式也可以嵌套使用

假如我们再加个条件:我们想匹配连续三个 the或者连续三个 you,怎么实现?这就是正则表达式的选择操作符,也叫或操作符了

上面的问题就可以使用正则表达式(the|you){3}来表示

当一个模式的全部或者部分内容由一对括号括起来时,就对表达式进行了分组(其实就是放在()中的子表达式),并且把分组匹配到内容捕获并且临时存放在内存中。这就是捕获分组,可以在后面表达式中使用就叫后向引用,或者叫回溯引用。

正则表达式基本用法 正则表达式 点

默认情况下,分组是从左到右依次排序从1编号,第一个分组就是1,第二个分组就是2等等。

后向引用很简单就是一个 \或者$后面跟相应编号即可。例如 \1或者$1就表示引用第一个捕获分组。

前面讲捕获分组都是通过位置编号来访问,在perl和python、.NET等语言中还支持对捕获分组命名。这样就比较容易理解

顾名思义,与捕获分组相反,就是不会将分组匹配的内容放在内存中。主要是为了提高性能。

使用方法:在分组的开头加上?:,例如(?:the)

环视是一种非捕获分组,它根据某个模式之前或者之后的内容要求匹配其他模式。环视也称为零宽度断言。

(?(id/name)yes-pattern|no-pattern)

如果给定的 id或 name存在,将会尝试匹配 yes-pattern;否则就尝试匹配 no-pattern, no-pattern可选;

例如:email样式匹配(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$),当<存在时,则最后要匹配>;否则匹配结束符$

《学习正则表达式》

《正则表达式必知必会》

Python正则表达式的几种匹配用法

下面列出: 1.测试正则表达式是否匹配字符串的全部或部分regex=ur""#正则表达式

if re.search(regex, subject): do_something()else: do_anotherthing() 2.测试正则表达式是否匹配整个字符串 regex=ur"/Z"#正则表达式末尾以/Z结束

if re.match(regex, subject): do_something()else: do_anotherthing() 3.创建一个匹配对象,然后通过该对象获得匹配细节(Create an object with details about how the regex matches(part of) a string) regex=ur""#正则表达式

match= re.search(regex, subject)if match:# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() do_something()else: do_anotherthing() 4.获取正则表达式所匹配的子串(Get the part of a string matched by the regex) regex=ur""#正则表达式

match= re.search(regex, subject)if match: result= match.group()else: result="" 5.获取捕获组所匹配的子串(Get the part of a string matched by a capturing group) regex=ur""#正则表达式

match= re.search(regex, subject)if match: result= match.group(1)else: result="" 6.获取有名组所匹配的子串(Get the part of a string matched by a named group) regex=ur""#正则表达式

match= re.search(regex, subject)if match:result= match.group"groupname")else:result="" 7.将字符串中所有匹配的子串放入数组中(Get an array of all regex matches in a string) result= re.findall(regex, subject) 8.遍历所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?//1>", subject)# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() 9.通过正则表达式字符串创建一个正则表达式对象(Create an object to use the same regex for many operations) reobj= re.compile(regex) 10.用法1的正则表达式对象版本(use regex object for if/else branch whether(part of) a string can be matched) reobj= re.compile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正则表达式对象版本(use regex object for if/else branch whether a string can be matched entirely) reobj= re.compile(r"/Z")#正则表达式末尾以/Z结束

if reobj.match(subject): do_something()else: do_anotherthing() 12.创建一个正则表达式对象,然后通过该对象获得匹配细节(Create an object with details about how the regex object matches(part of) a string) reobj= re.compile(regex) match= reobj.search(subject)if match:# match start: match.start()# match end(exclusive): atch.end()# matched text: match.group() do_something()else: do_anotherthing() 13.用正则表达式对象获取匹配子串(Use regex object to get the part of a string matched by the regex) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group()else: result="" 14.用正则表达式对象获取捕获组所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group(1)else: result="" 15.用正则表达式对象获取有名组所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj= re.compile(regex) match= reobj.search(subject)if match: result= match.group("groupname")else: result="" 16.用正则表达式对象获取所有匹配子串并放入数组(Use regex object to get an array of all regex matches in a string) reobj= re.compile(regex) result= reobj.findall(subject) 17.通过正则表达式对象遍历所有匹配子串(Use regex object to iterate over all matches in a string) reobj= re.compile(regex)for match in reobj.finditer(subject):# match start: match.start()# match end(exclusive): match.end()# matched text: match.group()字符串替换 1.替换所有匹配的子串#用newstring替换subject中所有与正则表达式regex匹配的子串

result= re.sub(regex, newstring, subject) 2.替换所有匹配的子串(使用正则表达式对象) reobj= re.compile(regex) result= reobj.sub(newstring, subject)字符串拆分 1.字符串拆分 result= re.split(regex, subject) 2.字符串拆分(使用正则表示式对象) reobj= re.compile(regex) result= reobj.split(subject)

如何在正则表达式中使用条件匹配

在正则表达式中,条件匹配允许根据特定条件选择不同的匹配模式,其核心逻辑类似于编程中的 if-else。以下是详细说明:

一、基本语法结构条件匹配的两种主要形式:

简单条件:(?(condition)true-pattern)若 condition成立,则匹配 true-pattern。完整条件:(?(condition)true-pattern|false-pattern)若 condition成立,匹配 true-pattern;否则匹配 false-pattern。条件类型:

捕获组是否存在:如(1)检查第一个分组是否被捕获。零宽断言:如(?=...)(正向预查)或(?<=...)(反向预查)。

二、核心用法示例1.基础示例:根据分组存在与否切换模式(abc)?(?(1)def|xyz)逻辑:若(abc)被捕获(分组1存在),则后续必须匹配 def;否则匹配 xyz。匹配结果:输入 abcdef→匹配成功(abc+ def)。

输入 xyz→匹配成功(直接匹配 xyz)。

2.应用场景:匹配带引号或不带引号的字符串处理HTML属性值时,需兼容带单/双引号或无引号的情况:

(["'])?([^"']+)(?(1)1|(?!s))分解:(["'])?:捕获可选的引号(分组1)。

([^"']+):匹配非引号内容。

(?(1)1|(?!s)):若存在引号(分组1存在),则必须匹配相同闭合引号(1)。

若无引号,则后续不能为空格((?!s)),避免误匹配其他属性。

示例匹配:

value="test"→匹配"test"(引号闭合)。value=test→匹配 test(无引号且后无空格)。3.使用命名组提升可读性通过命名组(如?<quote>)简化复杂表达式:

(?<quote>["'])?(w+)(?(quote)1|.)逻辑:(?<quote>["'])?:命名分组 quote捕获可选引号。

(w+):匹配单词字符。

(?(quote)1|.):若存在 quote,则匹配相同闭合引号(1)。

否则匹配点号(.),可能用于占位或终止符。

三、注意事项与兼容性引擎支持:

支持的语言/工具:Perl、PHP(PCRE)、Python的 regex模块(非标准库 re)、.NET Framework。

不支持的语言:JavaScript原生正则、Java标准库等。

性能与可读性:

条件匹配可能降低正则性能,尤其在复杂场景下。

过度使用会降低代码可维护性,建议仅在必要时使用。

替代方案:

若环境不支持条件匹配,可通过多次匹配或字符串预处理实现类似逻辑。

四、总结核心语法:(?(condition)true-pattern|false-pattern),通过检查分组或断言切换匹配模式。典型场景:处理可选引号、条件性闭合标签等结构化文本。兼容性:优先确认目标环境是否支持(如PCRE兼容引擎)。掌握条件匹配可显著提升正则的灵活性,但需权衡复杂度与实际需求。

OK,本文到此结束,希望对大家有所帮助。

ai换脸软件ios,苹果怎么ai换脸苹果手机ai换脸视频软件是什么骂阵(骂阵任务如何做)