网站建设外出考察信息今晚12点上海又要封控了吗
2026/4/11 15:42:41 网站建设 项目流程
网站建设外出考察信息,今晚12点上海又要封控了吗,石家庄软件开发定制,劳务派遣和外包一样吗1、正则表达式是什么#xff1f; 正则表达式#xff0c;又称规则表达式、常规表示法#xff08;Regular Expression#xff0c;简写为 regex、regexp 或 RE#xff09;#xff0c;是计算机科学领域中对字符串操作的一种逻辑公式。它由事先定义好的特定字符及这些字符的组…1、正则表达式是什么正则表达式又称规则表达式、常规表示法Regular Expression简写为 regex、regexp 或 RE是计算机科学领域中对字符串操作的一种逻辑公式。它由事先定义好的特定字符及这些字符的组合构成一个 “规则字符串”以此来表达对其他字符串的过滤逻辑通常用于查找、替换符合特定特征的字符串或者验证某个字符串是否满足指定要求。2、基础语法入门2.1 普通字符与元字符正则表达式由普通字符和元字符组成。普通字符如字母、数字精准匹配自身像 “abc” 就严格匹配字符串中的 “abc”。元字符则具特殊含义“.” 可匹配除换行符外任意字符如正则表达式 “a.c” 能匹配 “abc”“a1c” 等“\d” 匹配数字“\w” 匹配字母、数字、下划线如 “\d\d” 匹配 “12”“34” 等两位数字组合“\w” 匹配连续字母数字下划线序列像 “abc123”“_hello”。二者结合能构建复杂匹配模式如 “\d {3}-\d {8}” 匹配常见的 3 位区号 - 8 位电话号码格式。2.2 限定符限定符用于控制字符出现次数。“” 表示前字符出现 0 次或多次“a” 可匹配空串、“a”“aa” 等“” 要求前字符至少出现 1 次“a” 匹配 “a”“aa” 等但不匹配空串“?” 使前字符出现 0 次或 1 次“colou?r” 匹配 “color”“colour”。还可用大括号精准控制“{n}” 指定出现 n 次“\d {4}” 匹配 4 位数字“{n,}” 至少 n 次“\d {3,}” 匹配至少 3 位数字“{n,m}” 出现次数介于 n 到 m“\d {2,4}” 匹配 2 到 4 位数字。如匹配手机号可用 “1 [3-9]\d {9}”确保以 1 开头、第二位 3 - 9、后接 9 位数字密码要求 6 - 12 位字母数字组合可写成 “[a-zA-Z0-9]{6,12}”。2.3 字符类与方括号表达式字符类用方括号 “[]” 定义匹配字符范围“[abc]” 匹配 “a”“b” 或 “c” 中任一字符“[0-9]” 等价于 “\d” 匹配数字“[a-zA-Z]” 匹配所有英文字母。还可用连字符 “-” 指定范围“[a-z]” 匹配小写字母“[A-Z]” 匹配大写字母。与元字符相比字符类适用于明确列举字符范围场景元字符更侧重抽象类型匹配如匹配身份证号中生日部分 “\d {4}(-\d {2}){2}”用 “[0-9]” 替换 “\d” 也行但前者表意更清晰匹配单词首字母大写的单词用 “[A-Z]\w*” 更便捷体现二者适用差异。// 选择符 (|)QRegularExpressionre(cat|dog|bird);// 匹配 cat 或 dog 或 bird// 转义特殊字符QRegularExpressionre1(\\.);// 匹配字面点 .QRegularExpressionre2(\\();// 匹配左括号 (QRegularExpressionre3(\\$);// 匹配美元符号 $2.4 分组与捕获分组用括号 “()” 将字符组合成子表达式使操作更灵活如 “(ab)” 匹配连续出现的 “ab” 组合如 “abab”“ababab”。捕获组能提取匹配子串供后续使用默认从左到右编号如 “(\d {4})-(\d {2})-(\d {2})” 匹配日期可用编号在程序中引用对应部分。QRegularExpressionre(pattern);// 常用选项re.setPatternOptions(QRegularExpression::CaseInsensitiveOption);// 忽略大小写re.setPatternOptions(QRegularExpression::MultilineOption);// 多行模式re.setPatternOptions(QRegularExpression::DotMatchesEverythingOption);// .匹配所有re.setPatternOptions(QRegularExpression::ExtendedPatternSyntaxOption);// 扩展语法// 组合多个选项re.setPatternOptions(QRegularExpression::CaseInsensitiveOption|QRegularExpression::MultilineOption);非捕获组 “ ( ? : ) ” 只分组不捕获用于仅需分组逻辑无需保存子串场景如 “(?:\d {3})-(?:\d {8})” 匹配电话号码不存储区号、号码子串节省内存提升效率如提取姓名 “([A-Z][a-z]) ([A-Z][a-z])”、日期 “(\d {4})-(?:\d {2})-(?:\d {2})” 时合理运用分组与捕获让文本处理事半功倍。// 分组和捕获QRegularExpressionre((\\d{4})-(\\d{2})-(\\d{2}));QRegularExpressionMatch matchre.match(2024-01-15);if(match.hasMatch()){QString yearmatch.captured(1);// 2024QString monthmatch.captured(2);// 01QString daymatch.captured(3);// 15QString fullmatch.captured(0);// 2024-01-15}// 命名捕获组 (?namepattern)QRegularExpressionre(^(?year\\d{4})-(?month\\d{2})-(?day\\d{2})$);QRegularExpressionMatch matchre.match(2024-01-15);if(match.hasMatch()){QString yearmatch.captured(year);// 2024QString monthmatch.captured(month);// 01QString daymatch.captured(day);// 15}2.5 前向断言和后向断言// 正向前瞻 (?pattern)QRegularExpressionre1(\\w(?\\.cpp));// 匹配 .cpp 前的单词// main.cpp → 匹配 main// 负向前瞻 (?!pattern)QRegularExpressionre2(\\d{3}(?!\\d));// 匹配不是4位数字开头的3位数字// 123 → 匹配1234 → 不匹配// 正向后顾 (?pattern) - 需要设置模式选项QRegularExpressionre3((?\\$)\\d);// 匹配 $ 后的数字// $100 → 匹配 100// 负向后顾 (?!pattern)QRegularExpressionre4((?!\\$)\\d);// 匹配不在 $ 后的数字3、常用场景3.1 邮箱验证在日常的数据处理中数据验证是确保信息准确性的关键一环而正则表达式在其中扮演着举足轻重的角色。以电子邮箱验证为例一个合法的邮箱地址需要遵循特定的格式规范。其正则表达式通常为 “1[a-zA-Z0-9-].[a-zA-Z0-9-.] ” 分别表示匹配字符串的开头和结尾确保整个字符串完全符合规则“[a-zA-Z0-9_.±]” 定义了邮箱用户名部分可出现的字符范围涵盖字母、数字、点、下划线、加号和减号“” 限定用户名至少出现一个字符“” 是邮箱地址的固定分隔符“[a-zA-Z0-9-]” 用于匹配域名主体如 “qq”“163” 等最后的 “.[a-zA-Z0-9-.]” 则表示域名后缀像 “com”“net”“org” 以及国家顶级域名 “cn” 等。当用户在注册页面输入邮箱时后端程序通过该正则表达式进行校验若不符合则及时提示错误避免无效数据录入。boolisValidEmail(constQStringemail){// 简单的邮箱验证正则QRegularExpressionre(^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\\.[a-zA-Z]{2,}$);re.setPatternOptions(QRegularExpression::CaseInsensitiveOption);QRegularExpressionMatch matchre.match(email);returnmatch.hasMatch();}// 测试qDebug()isValidEmail(userexample.com);// trueqDebug()isValidEmail(user.namedomain.co.uk);// trueqDebug()isValidEmail(invalid.email);// false3.2 手机号验证手机号验证同样重要随着移动互联网普及精准识别手机号格式是众多业务基础。常见正则表达式如 “^1 [3-9]\d {9}$”明确手机号以 “1” 开头紧跟第二位是 “3” 到 “9” 中任一数字后面再续接 9 位数字精准匹配国内主流手机号码格式。无论是电商平台下单、社交软件注册还是金融业务办理此正则都保障了手机号录入的准确性防止因格式错误引发后续流程问题。boolisValidChinesePhone(constQStringphone){// 中国大陆手机号验证QRegularExpressionre(^(\\86)?1[3-9]\\d{9}$);QRegularExpressionMatch matchre.match(phone);returnmatch.hasMatch();}// 测试qDebug()isValidChinesePhone(13800138000);// trueqDebug()isValidChinesePhone(8613800138000);// trueqDebug()isValidChinesePhone(12800138000);// false3.3 身份证号验证身份证号验证更为严谨关乎身份识别与信息安全。18 位身份证号正则 “2\d {5}(18|19|20)\d {2}((0 [1-9])|(1 [0-2]))(([0-2][1-9])|10|20|30|31)\d {3}[0-9Xx]$”前六位 “[1-9]\d {5}” 匹配地址码限定以非零数字开头后接 5 位数字对应各地区行政区划代码“(18|19|20)\d {2}” 精准定位出生年份涵盖常见 1800 - 2099 年范围“((0 [1-9])|(1 [0-2]))” 与 “(([0-2][1-9])|10|20|30|31)” 分别严格约束月份和日期遵循日期逻辑“\d {3}” 是顺序码“[0-9Xx]” 为校验码考虑到罗马数字 “X” 大写情况。政务系统、金融机构开户、交通票务预订等场景运用此正则有效甄别身份证号合法性保障业务有序开展。3.4 URL 解析voidparseUrl(constQStringurl){QRegularExpressionre(^(https?|ftp)://([^/:])(?::(\\d))?(/.*)?$);QRegularExpressionMatch matchre.match(url);if(match.hasMatch()){QString protocolmatch.captured(1);// http, https, ftpQString hostmatch.captured(2);// 域名QString portmatch.captured(3);// 端口QString pathmatch.captured(4);// 路径qDebug()Protocol:protocol;qDebug()Host:host;qDebug()Port:(port.isEmpty()?default:port);qDebug()Path:(path.isEmpty()?/:path);}}// 测试parseUrl(https://www.example.com:8080/path/to/page);3.5 HTML 标签提取QStringListextractHtmlTags(constQStringhtml){QStringList tags;QRegularExpressionre((\\w)[^]*);QRegularExpressionMatchIterator ire.globalMatch(html);while(i.hasNext()){QRegularExpressionMatch matchi.next();tagsmatch.captured(1);// 标签名}returntags;}// 测试QString htmldiv classtestpHello/pbr/img src...//div;qDebug()extractHtmlTags(html);// [div, p, br, img]3.6 日期时间解析boolparseDateTime(constQStringtext,QDateTimedt){QRegularExpressionre(^(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})// 日期(?:\\s// 可选的时间部分(\\d{1,2}):(\\d{2})(?::(\\d{2}))?// 时:分:秒(?:\\s(AM|PM))?)?$,// 可选的上下午QRegularExpression::CaseInsensitiveOption);QRegularExpressionMatch matchre.match(text);if(!match.hasMatch())returnfalse;intyearmatch.captured(1).toInt();intmonthmatch.captured(2).toInt();intdaymatch.captured(3).toInt();dt.setDate(QDate(year,month,day));if(!match.captured(4).isEmpty()){inthourmatch.captured(4).toInt();intminutematch.captured(5).toInt();intsecondmatch.captured(6).isEmpty()?0:match.captured(6).toInt();// 处理 12 小时制QString ampmmatch.captured(7).toUpper();if(ampmPMhour12)hour12;if(ampmAMhour12)hour0;dt.setTime(QTime(hour,minute,second));}returndt.isValid();}3.7 QString 的正则方法QString textHello 123 World 456;// 替换QString replacedtext.replace(QRegularExpression(\\d),###);// Hello ### World ###// 分割QStringList partstext.split(QRegularExpression(\\s));// [Hello, 123, World, 456]// 检查是否包含boolcontainsNumbertext.contains(QRegularExpression(\\d{3}));// true// 查找位置intpostext.indexOf(QRegularExpression(\\d{3}));// 6 (123的位置)3.8 文本提取在当今数字化时代海量信息扑面而来从繁杂文本中精准提取关键信息成为诸多工作的必备技能正则表达式无疑是这一过程中的得力工具。在网页数据抓取领域假设你正为撰写一篇行业研究报告收集资料需要从众多网页中提取产品价格信息。网页源代码里价格数据常夹杂在大量 HTML 标签与文本间形如 “199.00”。此时运用正则表达式 “(.?)” 就能直击要害“” 与 “” 精准定位包裹价格文本的标签括号及 “.?” 开启捕获组以非贪婪模式匹配其间任意字符抓取如 “199.00” 的价格数据后续利用编程语言进一步清洗、转换即可为报告所用。日志文件分析场景中系统运维人员每日面对海量日志从中快速定位故障时间戳至关重要。日志记录格式或为 “[2024-08-15 12:30:05] ERROR: System crashed”借助正则 “”能迅速抽取 “[2024-08-15 12:30:05]” 时间戳信息通过统计、排序这些时间数据运维人员可精准回溯系统异常时段排查问题根源保障系统稳定运行其高效性与精准度远胜手动逐行查阅。3.9 搜索与替换无论是日常文档处理还是代码编写维护搜索与替换操作频繁出现正则表达式为其注入强大动力极大提升效率。 在文本编辑器里处理一篇长篇文稿时若需将文中所有 “color” 统一替换为 “colour”普通查找替换需多次手动确认易有遗漏。启用正则表达式查找 “color”替换为 “colour”编辑器依规则瞬间全局精准替换确保无一疏漏。又如调整文档格式将所有数字序号 “1.”“2.” 等替换为 “1”“2”正则 “\d.” 匹配数字加 “.” 组合替换为 “\d”一步到位完成格式转换让文档排版整齐规范。代码编写环节正则更是不可或缺。大型项目代码注释风格不一为统一规范、提升可读性需批量处理。如将 “// 这是注释” 格式统一为 “/ 这是注释 /”在代码编辑器或借助脚本工具用正则 “// (.)” 匹配单行注释内容替换为 “/ \1 */”其中 “\1” 引用捕获组内容自动转换注释格式维护代码库整洁助于团队协作开发降低理解成本让代码如精密齿轮组高效运转。a-zA-Z0-9_.± ↩︎1-9 ↩︎

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询