正则表达式学习详解

这篇具有很好参考价值的文章主要介绍了正则表达式学习详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

正则表达式

正则表达式(Regular Expression),通常简称为正则或正则表达式,是一种用于描述字符串模式的工具。它是由一系列字符和特殊字符组成的字符串,用于定义搜索模式或进行字符串匹配、替换、提取等操作。

正则表达式提供了一种灵活、强大且通用的方式来处理文本。它可以用于各种编程语言和文本编辑器中,例如Python、Java、JavaScript等,几乎所有语言很多场景都可以用到正则表达式。

使用正则表达式,可以进行以下操作:

  • 匹配:检查一个字符串是否与指定的模式匹配。
  • 搜索:在一个字符串中搜索满足指定模式的内容。
  • 替换:将字符串中满足指定模式的部分替换为其他内容。
  • 提取:从一个字符串中提取出满足指定模式的内容。

正则表达式使用一些特殊字符和语法来表示不同的匹配规则,例如:

  • 字符匹配:使用普通字符表示匹配该字符本身。
  • 字符类:使用方括号 [] 表示匹配指定范围内的字符。
  • 量词:使用特殊字符表示匹配字符出现的次数,如 *、+、?、{}。
  • 边界匹配:使用特殊字符表示匹配字符串的边界或位置,如 ^、$、\b。
  • 分组:使用圆括号 () 表示将一组字符作为一个单元进行匹配或提取。

正则表达式的语法和特性因不同的实现和工具而略有差异,但基本的概念和常用的模式匹配规则是通用的。

学习工具推荐:

下载与安装

你可以使用以下两种方式中的任意一个来下载安装正则表达式测试器,这个工具源文本内容不能输入太多,要么有时候会匹配不成功。

  • 安装版
    1. 下载 Regester安装程序
    2. 解压后运行 RegesterSetup.zh.exe
  • 绿色版
    1. 下载 Regester
    2. 解压后运行 Regester.exe
    3. 如果无法启动,请自行下载安装 Microsoft .Net Framework 4.8 后再试

常见正则表达式命令和参数解释:

  1. .(点号):匹配除换行符外的任意字符。

    • 示例:a.b 可以匹配 “aab”、“acb”、“adb” 等,但不匹配 “a\nb”。
  2. *:匹配前面的字符零次或多次。

    • 示例:ab*c 可以匹配 “ac”、“abc”、“abbc” 等。
  3. +:匹配前面的字符一次或多次。

    • 示例:ab+c 可以匹配 “abc”、“abbc” 等,但不匹配 “ac”。
  4. ?:匹配前面的字符零次或一次。

    • 示例:ab?c 可以匹配 “ac”、“abc”,但不匹配 “abbc”。
  5. [](字符类):匹配方括号内的任意字符。

    • 示例:[abc] 可以匹配 “a”、“b”、“c” 中的任意一个字符。
  6. [^](否定字符类):匹配不在方括号内的任意字符。

    • 示例:[^abc] 可以匹配除了 “a”、“b”、“c” 以外的任意字符。
  7. \d:匹配任意数字字符(0-9)。

    • 示例:\d+ 可以匹配一个或多个数字字符。
  8. \w:匹配任意字母、数字或下划线字符。

    • 示例:\w+ 可以匹配一个或多个字母、数字或下划线字符。
  9. \s:匹配任意空白字符(空格、制表符、换行符等)。

    • 示例:\s+ 可以匹配一个或多个空白字符。
  10. ^:匹配字符串的开头。

    • 示例:^abc 可以匹配以 “abc” 开头的字符串。
  11. $:匹配字符串的结尾。

    • 示例:abc$ 可以匹配以 “abc” 结尾的字符串。
  12. ()(分组):将字符组合成一个单元,可以对其进行操作。

    • 示例:(ab)+ 可以匹配 “ab”、“abab”、“ababab” 等。

零宽断言匹配示例:

零宽断言(Zero-width assertions)是正则表达式中的一种特殊语法,用于在匹配过程中对位置进行条件限制,而不匹配实际的字符。它们被称为零宽度断言,因为它们不会消耗字符串中的字符,仅用于确定匹配发生的位置。

零宽断言分为正向断言(Lookahead)和负向断言(Lookbehind)两种类型。正向断言用于指定位置后面的条件,负向断言用于指定位置前面的条件。

  1. 正向肯定预查(Positive Lookahead):

    • (?=abc):匹配后面紧跟着 “abc” 的位置。
    • 示例:a(?=bc) 可以匹配 “a”,但只有在后面跟着 “bc” 的情况下才匹配成功。
  2. 正向否定预查(Negative Lookahead):

    • (?!abc):匹配后面不紧跟着 “abc” 的位置。
    • 示例:a(?!bc) 可以匹配 “a”,但只有在后面不跟着 “bc” 的情况下才匹配成功。
  3. 负向肯定预查(Positive Lookbehind):

    • (?<=abc):匹配前面紧跟着 “abc” 的位置。
    • 示例:(?<=ab)c 可以匹配 “c”,但只有在前面紧跟着 “ab” 的情况下才匹配成功。
  4. 负向否定预查(Negative Lookbehind):

    • (?<!abc):匹配前面不紧跟着 “abc” 的位置。
    • 示例:(?<!ab)c 可以匹配 “c”,但只有在前面不跟着 “ab” 的情况下才匹配成功。

贪婪匹配非贪婪匹配

贪婪匹配(Greedy matching)和非贪婪匹配(Non-greedy matching)是正则表达式中量词(匹配内容多还是少)的匹配模式。

贪婪匹配

是指在满足匹配条件的前提下,尽可能多地匹配字符。它会尽量扩展匹配的范围,直到无法再匹配为止。贪婪匹配使用量词 +*{n,} 等,默认情况下都是贪婪匹配

例如:正则表达式 a+ 会尽量匹配连续重复的字符 “a”,直到遇到不是 “a” 的字符为止。

非贪婪匹配

是指在满足匹配条件的前提下,尽可能少地匹配字符。它会尽量缩小匹配的范围,以便允许后续的匹配得到满足。非贪婪匹配使用量词后面添加 ? 来表示。例如,正则表达式 a+? 会匹配尽可能少的连续重复的字符 “a”,以满足匹配的条件。

通过比较贪婪匹配和非贪婪匹配,可以更好地控制正则表达式的匹配行为。贪婪匹配通常用于尽可能多地捕获匹配的内容,而非贪婪匹配通常用于尽可能少地匹配,特别是在需要处理嵌套结构或提取特定部分的情况下非常有用。

贪婪匹配示例:

正则表达式:[a-z]+
输入字符串:abcdefg
匹配结果:abcdefg
解释:贪婪匹配会尽可能多地匹配小写字母。在这个示例中,正则表达式 [a-z]+ 匹配了整个字符串 abcdefg,因为它可以匹配一个或多个连续的小写字母。
非贪婪匹配示例:

正则表达式:[a-z]+?
输入字符串:abcdefg
匹配结果:a
解释:非贪婪匹配使用 ? 后缀来指示尽可能少地匹配小写字母。在这个示例中,正则表达式 [a-z]+? 只匹配了第一个小写字母 “a”,因为它尽可能少地匹配满足条件的字符。
贪婪匹配和非贪婪匹配的比较:

正则表达式:“.+”
输入字符串:“Hello” “World”
匹配结果(贪婪匹配):“Hello” “World”
匹配结果(非贪婪匹配):“Hello”
解释:贪婪匹配会尽可能多地匹配字符,因此 “.+” 会匹配整个字符串 “Hello” “World”。而非贪婪匹配则尽可能少地匹配字符,因此 “.+?” 只匹配了第一个字符串 “Hello”。
贪婪匹配和非贪婪匹配的比较:

正则表达式:[0-9]+
输入字符串:12345
匹配结果(贪婪匹配):12345
匹配结果(非贪婪匹配):12345
解释:无论是贪婪匹配还是非贪婪匹配,正则表达式 [0-9]+ 都会匹配整个字符串 12345,因为它可以匹配一个或多个连续的数字。

正则表达式练习题:

  1. 匹配邮箱地址:
    正则表达式:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
    示例输入:example@example.com

^:表示匹配字符串的开头。

\w+:表示匹配一个或多个字母、数字或下划线,这部分匹配了邮箱地址的用户名部分。

([-+.]\w+)*:表示匹配一个连字符、加号或句点后跟一个或多个字母、数字或下划线的组合,这部分匹配了用户名中的特殊字符及后续字符,可以重复零次或多次。

@:表示匹配邮箱地址中的@

\w+:表示匹配一个或多个字母、数字或下划线,这部分匹配了邮箱地址的域名中的名称部分。

([-.]\w+)*:表示匹配一个连字符或句点后跟一个或多个字母、数字或下划线的组合,这部分匹配了域名中的特殊字符及后续字符,可以重复零次或多次。
.:表示匹配邮箱地址中的点号(.),需要使用反斜杠进行转义。

\w+:表示匹配一个或多个字母、数字或下划线,这部分匹配了邮箱地址中的顶级域名部分。

([-.]\w+)*:表示匹配一个连字符或句点后跟一个或多个字母、数字或下划线的组合,这部分匹配了顶级域名中的特殊字符及后续字符,可以重复零次或多次。
$:表示匹配字符串的结尾。

  1. 匹配手机号码(简化版):
    正则表达式:^\d{11}$
    示例输入:12345678901

^:表示匹配字符串的开头。
\d:表示匹配一个数字。
{11}:表示前面的元素(即数字)必须连续重复11次。
$:表示匹配字符串的结尾。

  1. 匹配日期(格式为YYYY-MM-DD):
    正则表达式:^\d{4}-\d{2}-\d{2}$
    示例输入:2023-08-09

^:表示匹配字符串的开头。
\d:表示匹配一个数字。
{4}:表示前面的元素(即数字)必须连续重复4次,即匹配4位数字的年份。
-:表示匹配连字符。
\d{2}:表示前面的元素(即数字)必须连续重复2次,即匹配2位数字的月份。
-:表示匹配连字符。
\d{2}:表示前面的元素(即数字)必须连续重复2次,即匹配2位数字的日期。
$:表示匹配字符串的结尾。

  1. 匹配URL(以http或https开头):
    正则表达式:^(http|https)://[^\s/$.?#].[^\s]*$
    示例输入:https://www.example.com

^:表示匹配字符串的开头。
(http|https):使用括号和竖线(|)表示分组,表示匹配 http 或 https。
😕/:表示匹配 😕/ 字符串。
[^\s/$.?#]:表示匹配任意不是空白字符、斜杠、问号、点号或井号的字符。
.:表示匹配一个任意字符。
[^\s]*:表示匹配零个或多个任意不是空白字符的字符。
$:表示匹配字符串的结尾。

  1. 匹配整数(包括正负整数):
    正则表达式:^-?\d+$
    示例输入:-123

^:表示匹配字符串的开头。
-?:表示匹配可选的负号(减号)。- 表示匹配一个负号,? 表示前面的元素(即负号)可选。
\d+:表示匹配一个或多个数字。
$:表示匹配字符串的结尾。

  1. 匹配英文句子(以句号结尾):
    正则表达式:^[A-Z][^.!?]*\.$
    示例输入:This is a sentence.

^:表示匹配字符串的开头。
[A-Z]:表示匹配一个大写字母。
[^.!?]*:表示匹配零个或多个非句号、非问号和非感叹号的字符。这个部分用于匹配句子中除了句号以外的其他内容。
.:表示匹配句号。需要使用反斜杠进行转义,因为句号在正则表达式中是一个特殊字符。
$:表示匹配字符串的结尾。

  1. 匹配HTML标签(包括属性):
    正则表达式:<([a-z]+)(\s[a-z]+\s*=\s*"[^"]*")*\s*>.*<\/\1>$
    示例输入:<div class="example">This is a div.</div>
    匹配结果:匹配成功

<([a-z]+):表示匹配以 < 开始的标签,并捕获标签名。 [a-z]+ 表示匹配一个或多个小写字母。
(\s[a-z]+\s*=\s*"[^"]*")*:表示匹配零个或多个属性,每个属性由一个或多个小写字母组成的属性名、可选的空白字符、等号、可选的空白字符、以及由双引号包围的属性值组成。这部分用于匹配标签中的属性。
\s*>:表示匹配以空白字符结尾并以 > 结束的标签起始部分。
.*:表示匹配零个或多个任意字符,用于匹配标签内的内容。
</\1>:表示匹配以 </ 开始、后跟与起始标签相同的标签名、以 > 结束的结束标签。 \1 表示引用第一个捕获组中的标签名。

  1. 匹配IP地址(简易版):
    正则表达式:^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$
    示例输入:192.168.0.1
    匹配结果:匹配成功

^:表示匹配字符串的开头。
\d{1,3}:表示匹配一个由 1 到 3 位数字组成的部分。
.:表示匹配一个点号(.)。需要使用反斜杠进行转义,因为点号在正则表达式中是一个特殊字符。
.:表示匹配任意字符。
$:表示匹配字符串的结尾。

  1. 匹配邮政编码(6位数字):
    正则表达式:^\d{6}$
    示例输入:123456
    匹配结果:匹配成功

^:表示匹配字符串的开头。
\d{6}:表示匹配六个连续的数字。
\d:表示匹配一个数字。
{6}:表示前面的元素(即数字)重复出现六次。
$:表示匹配字符串的结尾。

  1. 匹配用户名(由字母、数字、下划线组成,长度为4-16位):
    正则表达式:^[a-zA-Z0-9_]{4,16}$
    示例输入:user_123
    匹配结果:匹配成功

^:表示匹配字符串的开头。
[a-zA-Z0-9_]:表示匹配一个字母(大小写)、数字或下划线字符。
{4,16}:表示前面的元素(即字母、数字或下划线)重复出现 4 到 16 次,限制了字符串的长度范围。
$:表示匹配字符串的结尾。

我们为什么需要学习正则表达式:

  1. 文本处理和搜索: 正则表达式是一种强大的工具,可用于在文本中进行搜索、匹配、替换和提取操作。它们可以帮助你快速有效地处理和操纵文本数据。

  2. 模式匹配和验证: 正则表达式是用于匹配和验证特定模式的工具。你可以使用它们来验证输入数据的格式、匹配特定模式的字符串,例如邮箱地址、URL、电话号码等。

  3. 编程和脚本语言支持: 正则表达式在许多编程语言和脚本语言中都有广泛的支持,包括 Python、JavaScript、Java、C#等。了解正则表达式可以帮助你在编程中更好地处理字符串操作。

  4. 文本编辑器和IDE: 许多文本编辑器和集成开发环境(IDE)都支持正则表达式搜索和替换功能。掌握正则表达式可以提高你在编码和文本编辑过程中的效率。

  5. 数据清洗和提取: 在数据处理和清洗过程中,正则表达式可以帮助你快速提取、筛选和转换数据。它们特别适用于处理大量文本数据或具有特定格式的数据。

  6. 网络爬虫和数据抓取: 当你需要从网页或其他来源中抓取数据时,正则表达式可以帮助你定位和提取所需的信息。它们是构建简单的网络爬虫和数据抓取工具的有用工具。

学习正则表达式可以提升你在文本处理、模式匹配、数据清洗和编程方面的技能。它们是处理和操作文本的强大工具,广泛应用于软件开发、数据分析、文本处理等领域。掌握正则表达式将为你提供更多的灵活性和能力来处理和操作各种类型的文本数据。文章来源地址https://www.toymoban.com/news/detail-637271.html

到了这里,关于正则表达式学习详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python正则表达式之学习正则表达式三步曲

            正则表达式描述了一种字符串匹配的模式,可以用来检查一个串的有无某子串,或者做子串匹配替换,取出子串等操作。也可以说正则表达式就是字符串的匹配规则,也可以理解为是一种模糊匹配,匹配满足正则条件的字符串。         1、数据验证(eg:表单验

    2024年02月15日
    浏览(49)
  • 正则表达式详解

    正则表达式(Regular Expression),通常简称为正则或正则表达式,是一种用于描述字符串模式的工具。它是由一系列字符和特殊字符组成的字符串,用于定义搜索模式或进行字符串匹配、替换、提取等操作。 正则表达式提供了一种灵活、强大且通用的方式来处理文本。它可以用

    2024年01月17日
    浏览(36)
  • shell 正则表达式详解

    目录 正则表达式 一,什么是正则表达式 二,为什么使用正则表达式 三,如何使用正则表达式 示例: 四,基本正则表达式 基本正则表达式示例: 正则表达式字符集示例: 五,扩展正则表达式 扩展正则表达式示例: 扩展:        正则表达式是通过一些特殊字符的排列,

    2024年01月17日
    浏览(36)
  • 正则表达式 之 断言详解

    正则表达式的先行断言和后行断言一共有 4 种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion) (?=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion) (?!pattern) 零宽负向后行断言(zero-width neg

    2024年02月11日
    浏览(32)
  • Linux文本处理工具和正则表达式

    Linux文本处理工具和正则表达式 cat 最常用的文件查看命令;当不指明文件或者文件名为一杠’-\\\'时,读取标准输入。 more 默认将多行文本满屏输出,只允许向文本末尾翻页(空格键满屏翻页;回车键单行翻页),阅读到文末自动退出。 用法 一般使用管道传给more来阅读内容超过

    2024年02月13日
    浏览(36)
  • MySQL正则表达式 | 事务详解

    目录 一、正则表达式 实例操作 二、事务 事务控制语句 MYSQL 事务处理主要有两种方法 SQL测试代码 PHP中使用事务实例 使用保留点 SAVEPOINT MySQL可以通过  LIKE ...%  来进行模糊匹配。 MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。 如果

    2023年04月18日
    浏览(27)
  • python 之正则表达式详解

    分清字符串与字符 在Python中,前缀 r 或 R 表示原始字符串。这种原始字符串中的反斜杠字符 被视为普通字符,而不是转义字符。这在处理正则表达式、文件路径等需要保留反斜杠原始含义的情况下非常有用。 原始字符串的特点: 反斜杠不进行转义: 在普通字符串中,反斜

    2024年02月06日
    浏览(38)
  • 机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

    为了完成本关任务,你需要掌握: 在 Python 中使用正则表达式; 最基础正则表达式; 正则匹配函数。 在 Python 中使用正则表达式 正可谓人生苦短,我用 Python。Python 有个特点就是库非常多,自然拥有正则匹配这种常见的库,并且此库已经嵌入在 Python 标准库中,使用起来非常

    2024年01月22日
    浏览(39)
  • Notepad++工具通过正则表达式批量替换内容

    Ctrl+H弹出小窗口;查找目标输入$,替换为输入特定字符串;选中循环查找,查找模式选正则表达式;最后点击全部替换 Ctrl+H弹出小窗口;查找目标输入^,替换为输入特定字符串;选中循环查找,查找模式选正则表达式;最后点击全部替换 Ctrl+H弹出小窗口;查找目标输入 相

    2024年02月15日
    浏览(91)
  • Python 正则表达式:强大的文本处理工具

    正则表达式是一种强大的文本匹配和处理工具,它可以用来在字符串中查找、替换和提取符合某种规则的内容。在Python中,使用re模块可以轻松地操作正则表达式,它提供了丰富的功能和灵活的语法。 正则表达式在许多场景中都非常有用。以下是一些常见的应用场景: 数据清

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包