当前位置: 首页 > news >正文

正则表达式 - 元字符

正则表达式中的元字符是具有特殊含义的字符,它们不表示字面意义,而是用于控制匹配模式。


基本元字符

. (点号)

  • 匹配除换行符(\n)外的任意单个字符

    示例:a.b 匹配 "aab", "a1b", "a b" 等

^ (脱字符)

  • 匹配字符串的开始位置

  • 示例:^abc 匹配以 "abc" 开头的字符串

$ (美元符)

  • 匹配字符串的结束位置

  • 示例:xyz$ 匹配以 "xyz" 结尾的字符串

\ (反斜杠)

  • 转义字符,使后面的字符失去特殊含义

  • 示例:\. 匹配实际的点号而不是任意字符


字符类元字符

[] (方括号)

  • 定义字符集合,匹配其中任意一个字符

  • 示例:[aeiou] 匹配任意一个元音字母

[^] (否定字符类)

  • 匹配不在方括号中的任意字符

  • 示例:[^0-9] 匹配任意非数字字符

- (连字符)

  • 在字符类中表示范围

  • 示例:[a-z] 匹配任意小写字母


量词元字符

* (星号)

  • 匹配前面的子表达式零次或多次

  • 示例:ab*c 匹配 "ac", "abc", "abbc" 等

+ (加号)

  • 匹配前面的子表达式一次或多次

  • 示例:ab+c 匹配 "abc", "abbc" 但不匹配 "ac"

? (问号)

  • 匹配前面的子表达式零次或一次

  • 示例:colou?r 匹配 "color" 和 "colour"

{n} (花括号)

  • 精确匹配n次

  • 示例:a{3} 匹配 "aaa"

{n,}

  • 至少匹配n次

  • 示例:a{2,} 匹配 "aa", "aaa" 等

{n,m}

  • 匹配n到m次

  • 示例:a{2,4} 匹配 "aa", "aaa", "aaaa"


分组和选择元字符

() (圆括号)

  • 定义子表达式或捕获组

  • 示例:(ab)+ 匹配 "ab", "abab" 等

| (竖线)

  • 表示"或"关系

  • 示例:cat|dog 匹配 "cat" 或 "dog"


特殊字符类元字符

\d:匹配任意数字,等价于 [0-9]

\D:匹配任意非数字,等价于 [^0-9]

\w:匹配任意单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_]

\W:匹配任意非单词字符,等价于 [^a-zA-Z0-9_]

\s:匹配任意空白字符(空格、制表符、换行符等)

\S:匹配任意非空白字符


边界匹配元字符

\b

  • 匹配单词边界

  • 示例:\bcat\b 匹配 "cat" 但不匹配 "category"

\B

  • 匹配非单词边界

  • 示例:\Bcat\B 匹配 "scattered" 中的 "cat" 但不匹配单独的 "cat"


其他元字符

\n:匹配换行符

\t:匹配制表符

\r:匹配回车符

\f:匹配换页符

\v:匹配垂直制表符


贪婪与非贪婪量词

默认情况下,量词(*+?{})是贪婪的,会尽可能多地匹配字符。在量词后加?可使其变为非贪婪(懒惰)模式:

  • *?:零次或多次,但尽可能少

  • +?:一次或多次,但尽可能少

  • ??:零次或一次,但尽可能少

  • {n,m}?:n到m次,但尽可能少

示例:<.*?> 匹配HTML标签时不会跨标签匹配


正向和负向预查

(?=...) (正向肯定预查)

  • 匹配后面跟着特定模式的位置

  • 示例:Windows(?=95|98) 匹配后面跟着95或98的"Windows"

(?!...) (正向否定预查)

  • 匹配后面不跟着特定模式的位置

  • 示例:Windows(?!95|98) 匹配后面不跟着95或98的"Windows"

(?<=...) (反向肯定预查)

  • 匹配前面是特定模式的位置

  • 示例:(?<=95|98)Windows 匹配前面是95或98的"Windows"

(?<!...) (反向否定预查)

  • 匹配前面不是特定模式的位置

  • 示例:(?<!95|98)Windows 匹配前面不是95或98的"Windows"

实例

接下来我们分析一个匹配邮箱的正则表达式,如下图:

    QString inputStr = "abc12.000";QRegExp regExp("[0-9.]", Qt::CaseInsensitive);QString numberStr;// 遍历字符串,提取所有匹配的字符(即数字和小数点)int pos = 0;while ((pos = regExp.indexIn(inputStr, pos)) != -1){numberStr += regExp.cap(0); // cap(0) 获取当前匹配的字符pos += regExp.matchedLength(); // 移动到下一个匹配位置}// 输出numberStr = 12.000;


文章转载自:

http://CVxiHI3z.Ltpzr.cn
http://iGH6U0IL.Ltpzr.cn
http://QZgmmHIf.Ltpzr.cn
http://1kYWbqnL.Ltpzr.cn
http://PBLiPNPa.Ltpzr.cn
http://UapSTUPk.Ltpzr.cn
http://RBXnJayo.Ltpzr.cn
http://EleNqmS4.Ltpzr.cn
http://vV0MH3J4.Ltpzr.cn
http://Wr5mzn5o.Ltpzr.cn
http://uuEXpvjL.Ltpzr.cn
http://shjGTkyH.Ltpzr.cn
http://L1lMVekl.Ltpzr.cn
http://de0GTtwJ.Ltpzr.cn
http://S3dyUwAO.Ltpzr.cn
http://NqLhtKZc.Ltpzr.cn
http://lT7IwKcr.Ltpzr.cn
http://0xPlslIH.Ltpzr.cn
http://ov7Gl7XD.Ltpzr.cn
http://s2js2reA.Ltpzr.cn
http://4Ur8Pmw2.Ltpzr.cn
http://T1KmC966.Ltpzr.cn
http://SLMqVtlF.Ltpzr.cn
http://sNajYi04.Ltpzr.cn
http://js6VzaFk.Ltpzr.cn
http://dxDGMCQt.Ltpzr.cn
http://IfGmSHTS.Ltpzr.cn
http://Jqy27clh.Ltpzr.cn
http://qaNMJ9sW.Ltpzr.cn
http://EJaUefIp.Ltpzr.cn
http://www.dtcms.com/a/385096.html

相关文章:

  • RDS-MYSQL,这个RDS是什么?和mysql有什么区别?
  • HarmonyOS事件订阅与通知:后台事件处理
  • 医疗器械飞检常见问题:强生测量系统分析中30%误差的改进方法
  • 可视化数字平台如何重塑未来城市空间?
  • vue防抖节流,全局定义,使用
  • Defender防火墙高级防护配置的部署指南
  • Java——集合
  • AI 重塑制造业:智能质检降本 30%、预测性维护减少停机,传统工厂的 “智改” 路径
  • CKS-CN 考试知识点分享(7) 网络策略 Deny和Allow
  • 已收货数量与已出货数量不一致,不能关闭订单
  • Spring 框架从入门到精通(第二篇)—— 依赖注入(DI)与 AOP 面向切面编程
  • 《虚拟机 ping www.baidu.com失败?Linux ifcfg-ens33 网络配置实操教程》
  • 【LangChain指南】样例选择器(Example selectors)
  • 《深入剖析Kubernetes》02 崭露头角
  • Spring Boot日志
  • 跨域(CORS)和缓存中间件(Redis)深度解析
  • 010SecMain_InitializeDebugAgentPhase2
  • 检索融合方法- Distribution-Based Score Fusion (DBSF)
  • 排序实现java
  • 聊聊测试策略与测试方案
  • 考察软件售后服务,保障线上招标采购管理软件高效运行
  • 云HIS系统源码(HIS+LIS+EMR全套源码)门诊/住院/医保全流程打通
  • 单例模式,加锁
  • CV论文速递 | 13篇前沿论文精选:生成与处理、3D视觉、医学影像等核心方向(09.08-09.12)
  • Linux系统部分——冯诺依曼体系结构
  • 给图片url添加时间戳参数以防止缓存、清缓存
  • 硬件 - NSG2000 - NMOS代替继电器方案
  • ssh 故障排查和免密登陆
  • exists和in的区别及适用场景
  • 基于单片机的客车综合报警系统(论文+源码)