QRegExp

描述

QRegExp 类使用正则表达式提供模式匹配。
正则表达式或“正则表达式”是一种用于匹配文本中子字符串的模式。这在许多情况下都很有用,例如,

  • 验证
    正则表达式可以测试子字符串是否满足某些条件,例如是整数或不包含空格。
  • 搜索
    正则表达式提供了比简单的子字符串匹配更强大的模式匹配,例如,匹配一个单词 mail、letter 或 correspondence,但没有一个单词 email、mailman、mailer、letterbox 等。
  • 搜索和替换
    正则表达式可以用不同的子字符串替换子字符串的所有匹配项,例如,将所有出现的 & 替换为 &,除非 & 后面已经跟着 amp;。
  • 字符串拆分
    正则表达式可用于标识字符串应拆分的位置,例如拆分制表符分隔的字符串。

介绍

正则表达式由表达式、****量词断言构建而成。最简单的表达式是一个字符,例如 x 或 5。表达式也可以是用方括号括起来的一组字符。[ABCD] 将匹配 A 或 B 或 C 或 D。我们可以将这个表达式写成 [A-D],并且与英语字母表中任何大写字母匹配的表达式都写成 [A-Z]。
量词指定必须匹配的表达式的出现次数。x{1,1} 表示匹配 1 且仅匹配一个 x。x{1,5} 表示匹配包含至少一个 x 但不超过 5 个的 x 字符串行。
请注意,通常不能使用正则表达式来检查平衡的括号或标记。例如,如果标签没有嵌套,则可以编写正则表达式以匹配开始的 html 及其结束,但如果标记是嵌套的,则相同的正则表达式将匹配具有错误结束符的开始标记。对于粗体的片段,第一个将与第一个匹配,这是不正确的。但是,可以编写一个正确匹配嵌套括号或标记的正则表达式,但前提是嵌套级别的数量是固定的和已知的。如果嵌套级别的数量不是固定的和已知的,则不可能编写不会失败的正则表达式。

假设我们希望正则表达式匹配 0 到 99 范围内的整数。至少需要一位数字,因此我们从表达式 [0-9]{1,1} 开始,它与一位数字正好匹配一次。此正则表达式匹配 0 到 9 范围内的整数若要匹配最大 99 的整数,请将最大出现次数增加到 2,因此正则表达式变为 [0-9]{1,2}。此正则表达式满足匹配 0 到 99 之间的整数的原始要求,但它也将匹配出现在字符串中间的整数。如果我们希望匹配的整数是整个字符串,我们必须使用锚断言 ^(插入符号)和 $(美元)。当 ^ 是正则表达式中的第一个字符时,这意味着正则表达式必须从字符串的开头开始匹配。当 $ 是正则表达式的最后一个字符时,这意味着正则表达式必须与字符串的末尾匹配。正则表达式变为 ^[0-9]{1,2}$ 。请注意,断言(例如 ^ 和 $)不匹配字符串中的字符,而是匹配位置。

如果您看过其他地方描述的正则表达式,它们可能看起来与此处显示的正则表达式不同。这是因为某些字符集和某些量词非常常见,以至于它们被赋予了特殊的符号来表示它们。[0-9] 可以替换为符号 \d。正好匹配一个出现次数的量词 {1,1} 可以替换为表达式本身,即 x{1,1} 与 x 相同。所以我们的 0 到 99 匹配器可以写成 ^\d{1,2}KaTeX parse error: Undefined control sequence: \d at position 10: 。它也可以写成 ^\̲d̲\d{0,1},即从字符串的开头开始,匹配一个数字,紧接着是 0 或 1 位数字。在实践中,它将被写成 ^\d\d?KaTeX parse error: Undefined control sequence: \d at position 48: …达式成为可选的。正则表达式 ^\̲d̲\d? 表示从字符串的开头开始,匹配一个数字,紧接着是 0 或 1 个数字,紧接着是字符串的末尾。
要编写与“mail”或“letter”或“correspondence”之一匹配但不匹配包含这些单词的单词(例如“email”、“mailman”、“mailer”和“letterbox”)的正则表达式,请从匹配“mail”的正则表达式开始。完全表示时,正则表达式是 m{1,1}a{1,1}i{1,1}l{1,1},但是由于字符表达式由 {1,1} 自动量化,因此我们可以将正则表达式简化为邮件,即“m”后跟“a”,后跟“i”,后跟“l”。现在我们可以使用竖线 |,这意味着 or,包括其他两个单词,因此我们匹配三个单词中的任何一个的正则表达式变为 mail|letter|correspondence。匹配“邮件”或“信件”或“通信”。虽然此正则表达式将匹配我们想要匹配的三个单词之一,但它也将匹配我们不想匹配的单词,例如“电子邮件”。为了防止正则表达式匹配不需要的单词,我们必须告诉它在单词边界处开始和结束匹配。首先,我们将正则表达式括在括号中,(mail|letter|correspondence)。括号将表达式组合在一起,它们标识了我们希望捕获的正则表达式的一部分。将表达式括在括号中允许我们将其用作更复杂的正则表达式中的组件。它还允许我们检查这三个单词中的哪一个是实际匹配的。为了强制匹配在单词边界上开始和结束,我们将正则表达式括在 \b 单词边界断言中\b(mail|letter|correspondence)\b。现在正则表达式的意思是:匹配一个单词边界,后跟括号中的正则表达式,后跟一个单词边界\b 断言匹配正则表达式中的位置,而不是字符。单词边界是任何非单词字符,例如空格、换行符或字符串的开头或结尾。
如果我们想用 HTML 实体 && 替换 & 字符,要匹配的正则表达式就是 &。但此正则表达式还将匹配已转换为 HTML 实体的 & 符号。我们只想替换尚未跟在 amp; 后面的 & 符号。为此,我们需要否定的前瞻性断言,(?!__).然后,正则表达式可以写成 &(?!amp;),即匹配一个不跟 amp; 的 &。
如果我们想计算字符串中所有出现的“Eric”和“Eirik”,两个有效的解决方案是 \b(Eric|Eirik)\b 和 \bEi?ri[ck]\b.需要单词边界断言“\b”来避免匹配包含任一名称的单词,例如“Ericsson”。请注意,第二个正则表达式匹配的拼写比我们想要的要多:“Eric”、“Erik”、“Eiric”和“Eirik”。

符号意思
c一个字符代表它自己,c匹配字符c,除非这个 字符有特殊含义
\c一个反斜杠加一个字符,匹配字符本身,例外: ^:匹配字符串开头的文字插入符
\a匹配一个响铃符
\f匹配一个分页符
\n匹配一个换行符
\r匹配一个回车符
\t匹配一个水平制表符
\v匹配一个垂直制表符
\xhhh匹配与十六进制数hhhh(在0x0000和OxFFF之间)对应的Unicode字符
\0ooo匹配总数为o00(介于0和0377之间)的ASCI/拉丁字符。
.匹配任意字符
\d匹配一个数字
\D匹配一个非数字
\s匹配一个空格
\S匹配一个非空格
\w匹配一个单词
\W匹配一个非单词

字符集

方括号表示与方括号中包含的任何字符匹配。上述字符集缩写可以出现在方括号中的字符集中。除字符集缩写和以下两个例外情况外,字符在方括号中没有特殊含义。

字符含义
^如果字符集作为第一个字符出现(即紧接在左方括号之后),则插入符号将否定该字符集。[abc] 匹配 ‘a’ 或 ‘b’ 或 ‘c’,但 [^abc] 匹配 ‘a’ 或 ‘b’ 或 ‘c’ 以外的任何内容。
-破折号表示字符范围。[W-Z] 匹配“W”或“X”或“Y”或“Z”。

使用预定义的字符集缩写比跨平台和语言使用字符范围更具可移植性。例如,[0-9] 匹配西方字母表中的数字,但 \d 匹配任何字母表中的数字。
注意:在其他正则表达式文档中,字符集通常称为“字符类”。

量词

默认情况下,表达式由{1,1}自动量化,即它应该只出现一次。在下面的列表中,E代表表达式。表达式是一个字符,或者是一组字符的缩写,或者是方括号中的一组字符,或者是圆括号中的表达式。

量词含义
E?这个量词表示E可以出现零次或一次。这意味着前面的表达式是可选的,因为它会匹配无论是否找到该表达式。E? 和 E{0,1} 是等价的。例如,dents? 匹配 ‘dent’ 或 ‘dents’。这个量词用于正则表达式中,用于指定某个模式的可选性。在上述例子中,“dents?” 将匹配 ‘dent’ 或 ‘dents’ 这两个单词,其中 “s” 的出现是可选的。
E+匹配一个或多个出现的E.E+与E{1, }相同。例如,0+匹配“0”“00”“000”等
E*匹配零次或多次出现的 E。它与 E{0,} 相同。* 量词经常在错误中使用,其中应该使用 +。例如,如果在表达式中使用 \s*$ 来匹配以空格结尾的字符串,它将匹配每个字符串,因为 \s*$ 表示匹配零个或多个空格,后跟字符串末尾。匹配至少具有一个尾部空格字符的字符串的正确正则表达式是 \s+$。
E{n}匹配出现n次E的字符
E{n,}至少出现n次
E{,m}最多出现m次
E{n.m}至少出现n次,最多出现m次

断言

断言在regexp中出现的地方对文本做出一些声明,但是它们不匹配任何字符。在下面的列表中,E代表任何表达式。

断言含义
^插入符号表示字符串的开头。如果你想匹配一个文本 ^,你必须通过写 \^ 来转义它。例如,^#include 将仅匹配以字符“#include”开头的字符串。(当插入符号是字符集的第一个字符时,它具有特殊含义,请参阅字符集。
$KaTeX parse error: Undefined control sequence: \d at position 13: 表示字符串的末端。例如,\̲d̲\s* 将匹配以数字结尾的字符串(可选),后跟空格。如果你想匹配一个文本 $,你必须通过写入 \$ 来转义它。
\b一个词的边界。例如,正则表达式 \bOK\b 表示紧跟在单词边界(例如字符串或空格的开头)之后的字母“O”,然后是紧接在另一个单词边界(例如字符串末尾或空格)之前的字母“K”。但请注意,该断言实际上并不匹配任何空格,因此如果我们编写 (\bOK\b) 并且我们有一个匹配项,即使字符串是“It’s OK now”,它也只会包含“OK”。
\B非单词边界。如果 \b 为 false,则此断言为 true。例如,如果我们在“Left on”中搜索 \Bon\B,则匹配将失败(空格和字符串末尾不是非单词边界),但它会在“tonne”中匹配。
(?=E)正向先行断言(Positive lookahead)是一种正则表达式中的断言语法,如果在当前位置匹配成功,则断言为真。例如,const(?=\s+char) 表达式匹配 ‘const’,但仅当其后紧跟着 ‘char’ 时才为真,比如在 ‘static const char *’ 中。(与 const\s+char 进行对比,后者匹配 ‘static const char *’ 的整个字符串)。这种断言用于对某些模式进行前瞻性判断,以确保后续的匹配符合预期。
?!E负向先行断言(Negative lookahead)是正则表达式中的一种断言语法,如果在当前位置匹配失败,则断言为真。例如,const(?!\s+char) 表达式匹配 ‘const’,但当其后紧跟着 ‘char’ 时,断言会失败,即不匹配。这意味着该表达式可以用于排除某些特定的模式,确保后续的匹配不包含指定的内容。在给定的例子中,‘const’ 只有在不跟随 ‘char’ 的情况下才会匹配成功。

通配符匹配
大多数命令shell(如bash或cmd.exe)都支持“文件全局搜索”,即通过使用通配符来识别一组文件的能力。函数的作用是:在regexp和通配符模式之间进行切换。通配符匹配比完整的regexp简单得多,并且只有四个特性:

通配符含义
c除了下面提到的字符外,任何字符都代表自己。因此c与字符c匹配。
匹配任何单个字符。它与完全正则表达式中的 . 相同。
*匹配零个或多个任何字符。它与完整正则表达式中的 .* 相同。
[…]字符集可以用方括号表示,与完整的正则表达式类似。在字符集内部,就像在外部一样,反斜杠没有特殊含义。这意味着在字符集中使用反斜杠不会具有转义或特殊的含义。例如,[abc] 表示匹配字符 ‘a’、‘b’ 或 ‘c’ 中的任意一个。在字符集内部,元字符(如点号、星号等)通常被当作普通字符对待,而不是其正则表达式的特殊功能。然而,需要注意的是,方括号内的连字符(-)有时候会表示字符范围,例如 [a-z] 表示匹配从小写字母’a’到’z’之间的任意一个字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网关路由的方式有哪些

在微服务架构中,网关路由通常用于集中处理请求分发、认证、限流、熔断等任务。以下是几种常见的网关路由配置方式: Spring Cloud Gateway 1. **基于配置文件的路由**: - 在Spring Cloud Gateway中,可以通过YAML或JSON配置文件定…

【Linux】shell编程,()圆括号, []方括号, {}花括号与(())双括号的使用区别

1. ( )圆括号 初始化数组使用圆括号; 命令组,将一系列命令用空格隔开; 命令替换,使用$ 美元符,将命令进行嵌套使用;(有点儿类似于管道符作用的感觉) arr(1 2 3 4 5)2. [ ]方括号 …

【Linux】搭建私有yum仓库(类阿里云)

在搭建本地yum仓库并配置国内镜像阿里云源中了解yum源 yum : Yellow dog Updater,Modified,是一种基于rpm包的自动升级和软件包管理工具。yum能从指定的服务器自动下载rpm包并安装,自动计算出程序之间的依赖关系和软件安装的步骤&…

《Python编程从入门到实践》day25

# 昨日知识点回顾 如何创建多行外星人 碰撞结束游戏 创建game_stats.py跟踪统计信息 # 今日知识点学习 第14章 记分 14.1 添加Play按钮 14.1.1 创建Button类 import pygame.font# button.py class Button:def __init__(self, ai_game, msg):"""初始化按钮…

【Python系列】Python中列表属性提取

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

地下工程中测斜仪的关键应用

地下工程,如隧道、地铁和基坑等项目的建设,对于现代城市的发展至关重要。然而,这些工程的实施往往伴随着诸多风险,特别是与周围土体的稳定性有关的风险。为了确保工程的安全进行,实时监测技术变得尤为关键。其中&#…

vue3专栏项目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 页面 首页有专栏列表(ColumnList组件),专栏列表中有很多专栏,然后点击某个专栏就进入专栏详情页(ColumnDetail组件),专栏详情页中有很多文章,点击某个文章就进…

经开区创维汽车车辆交接仪式顺利举行,守护绿色出行助力低碳发展

5月10日,“创维新能源汽车进机关”交车仪式于徐州顺利举行,20辆创维EV6 II正式交付经开区政府投入使用。经开区陈琳副书记、党政办公室副主任张驰主任、经开区公车管理平台苑忠民科长、创维汽车总裁、联合创始人吴龙八先生、创维汽车营销公司总经理饶总先…

配置管理与IT资产管理:差异与协同共生

在信息技术日新月异的今天,高效、可靠的IT服务管理成为企业竞争力的关键一环。ITIL4 作为业界公认的IT服务管理框架,为我们提供了一套全面而系统的实践指南。在这一框架下,配置管理和IT资产管理作为两大核心实践,虽各有侧重&#…

线路和绕组中的波过程(三)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第三篇笔记。上一篇传送门。 冲击电晕对线路上波过程的影响 实际中的导线存在电阻,而且还有对地电导,会消耗一部分能量。但是因为雷击所涉及的传输距离很短,所以几乎可以忽略这…

深入解析RedisSearch:全文搜索的新维度

码到三十五 : 个人主页 在当今的数据时代,信息的检索与快速定位变得尤为关键。Redis,作为一个高性能的内存数据库,已经在缓存和消息系统中占据了重要地位。然而,Redis并不直接支持复杂的搜索功能。为了填补这一空白&am…

【计算机网络】计算机网络概述、计算机网络性能指标 习题1

0 1. 计算机网络可被理解为( )。 A.执行计算机数据处理的软件模块 B. 由自治的计算机互连起来的集合体 C.多个处理器通过共享内存实现的紧耦合系统 D. 用于共同完成一项任务的分布式系统 0 2.计算机网络最基本的功能是( )。 A.数据通信 B. 资源共享 C. 分布式处理 D. 信息综合…

python的deap库使用记录

主要是在遗传符号回归的代码中添加了注释和根据一部分源码做了一点改动 import operator import random import numpy as np import matplotlib.pyplot as plt from deap import algorithms, base, creator, tools, gp from operator import attrgetter##生成数据 def generat…

【Python系列】字节串与字典字节串

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

ASP.NET WebApi 如何使用 OAuth2.0 认证

前言 OAuth 2.0 是一种开放标准的授权框架,用于授权第三方应用程序访问受保护资源的流程。 OAuth 2.0 认证是指在这个框架下进行的身份验证和授权过程。 在 OAuth 2.0 认证中,涉及以下主要参与方: 资源所有者(Resource Owner&…

【.NET Cote】你真的了解HttpRuntime类吗

【.NET Cote】你真的了解HttpRuntime类吗 文章目录 【.NET Cote】你真的了解HttpRuntime类吗一、HttpRuntime概述二、HttpRuntime是什么包三、HttpRuntime属性四、HttpRuntime方法五、HttpRuntime.Cache方法六、HttpRuntime.Cache应用 一、HttpRuntime概述 C# HttpRuntime是一…

JAVA基础之下载,socket实现网络聊天

目录 一、如何利用正则表达式找到img标签 compile编译编制 二、下载图片的方法 三、socket实现网络聊天 1.inputStreamReader 字节的读取流--->字符的读取流 2.outputStreamWriter 字节的写入流--->字符的写入流 一、如何利用正则表达式找到img标签 compile编译编制…

antd组件状态变换为啥要使用剪头函数

先看下代码 import React, {useState} from react; import {Switch, Typography} from antd;const {Paragraph, Text} Typography;const App: React.FC () > { const [ellipsis, setEllipsis] useState(true);return (<>//正确的<Switch checked{ellipsis}onCh…

掌握SQL的时间序列分析利器:LEAD与LAG函数详解

在SQL中&#xff0c;处理时间序列数据时&#xff0c;经常需要查看当前行与相邻行之间的关系。这时&#xff0c;LEAD和LAG两个窗口函数就显得尤为重要。它们允许我们访问结果集中的前一行或后一行的数据&#xff0c;为数据分析和处理提供了极大的便利。本文将详细介绍LEAD和LAG函…

steam_api64.dll是什么东西?steam_api64.dll缺失的多个详细解决方法

在现代PC游戏领域&#xff0c;Steam无疑是最具影响力的游戏分发和社交平台之一。它不仅提供了一个庞大的游戏市场&#xff0c;还集成了好友系统、成就系统、云存储等多种功能&#xff0c;为数百万玩家提供了便捷的游戏体验。在这庞大的生态系统中&#xff0c;steam_api64.dll作…