正则表达式——嵌入条件
嵌入条件1、为什么要嵌入条件2、正则表达式里的条件2.1、回溯引用条件2.2、前后查找条件1、为什么要嵌入条件123456-7890和123-456-7890都是可接受的北美电话号码格式而1234567890、​123-456-7890和123-456-7890虽然都包含着数目正确的数字字符但它们的格式都不对。如果让你来编写一个正则表达式并让它只匹配可接受的格式不匹配其他格式你会怎么做这个问题看似简单其实颇有难度。下面是最容易想到的解决方案文本123-456-7890(123)456-7890(123)-456-7890(123-456-789012345678901234567890正则表达式\(?\d{3})?-?\d{3}-\d{4}结果\​匹配一个可选的左括号——请注意这里必须对进行转义\d{3}匹配前三位数字\​匹配一个可选的右括号-匹配一个可选的连字符\d{3}-\d{4}匹配剩余的七位数字中间用一个连字符分隔​。原始文本中的最后两行不与这个模式匹配但第3行和第4行与之匹配——这是不正确的第3行的后面多了一个-第4行少了一个配对的右括号​。把\? -替换为[\]-]​可以排除第3行字符或-只能出现一个不允许两个同时出现​但第4行还是无法排除。正确的模式应该只在电话代码里有一个左括号的时候才去匹配​。更准确地说应该是如果电话号码里有一个左括号​我们的模式必须去匹配​如果不是这样它就必须去匹配-。这种模式如果不使用条件处理根本无法编写。2、正则表达式里的条件正则表达式里的条件要用来定义。事实上你们已经见过几种非常特定的条件了?匹配前一个字符或表达式——如果它存在的话。?和?匹配前面或后面的文本——如果它存在的话。嵌入条件语法也使用了​这并没有什么让人感到吃惊的地方——因为嵌入条件不外乎以下两种情况根据一个回溯引用来进行条件处理。根据一个前后查找来进行条件处理。2.1、回溯引用条件回溯引用条件只在一个前面的子表达式搜索取得成功的情况下才允许使用一个表达式。听起来很费解我们还是用一个例子来说明好了你需要把一段文本里的IMG标签全都找出来不仅如此如果某个IMG标签是一个链接被括在A和/A标签之间的话你还要把整个链接标签匹配出来。请看下面这个例子文本!-- Nav bar --TDAHREF/homeIMGSRC/images/home.gif/AIMGSRC/images/spacer.figAHREF/searchIMGSRC/images/search.gif/AIMGSRC/images/spacer.gifAHREF/helpIMGSRC/images/help.gif/A/TD正则表达式([Aa]\s[^]\s*)?[Ii][Mm][Gg]\s[^](?(1)\s*\/[Aa])结果这个模式不解释是不容易看明白的。​[Aa]\s[^]\s*​将匹配一个A或a标签以及A或a标签的任意属性​这个标签可有可无因为这个子表达式的最后有一个​​。接下来[Ii]​[Mm]​[Gg]\s[^]匹配一个IMG大小写均可及其任意属性。​?1\s*/[Aa]是一个回溯引用条件——?1的含义是如果第一个回溯引用具体到本例就是A标签存在则使用\s*/[Aa]继续进行匹配换句话说只有当前面的A标签匹配成功才继续进行后面的匹配​。如果1存在\s*/[Aa]将匹配结束标签/A之后出现的任意空白字符。注意 ​1检查第一个回溯引用是否存在。在条件里回溯引用编号本例中的1不需要被转义。因此?1是正确的?\1不正确但后者通常也能工作​。这个语法提供了电话号码问题的解决方案如下所示文本123-456-7890(123)456-7890(123)-456-7890(123-456-789012345678901234567890正则表达式(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}结果从结果看这个模式解决了问题但它是如何解决问题的呢和前面一样​\ ​也匹配一个可选的左括号但我们这次把它用括号括起来得到了一个子表达式。随后的\d{3}匹配一位数字的区号。​?1\|-是一个回溯引用条件它将根据条件是否得到满足而去匹配或-——如果1存在也就是找到了一个左括号, \必须被匹配否则-必须被匹配。这样一来只有配对出现的括号才会被匹配如果没有使用括号或括号不配对电话号码中的区号和其余数字之间的-分隔符必须被匹配。提示 嵌入了条件的模式看上去往往非常复杂而这往往意味着调试工作会变得非常困难。如果别无选择先对整个模式的各组成部分分别进行调试再把它们拼装到一起这通常是一种比较好的办法。2.2、前后查找条件前后查找条件只在一个向前查找或向后查找操作取得成功的情况下才允许一个表达式被使用。定义一个前后查找条件的语法与定义一个回溯引用条件的语法大同小异——只需把回溯引用括号里的回溯引用编号替换为一个完整的前后查找表达式就行了。作为一个例子请你思考一下怎样匹配美国的邮政编码简称ZIP编码​。美国邮政编码有两种格式一种是12345形式的ZIP格式另一种是12345-6789形式的ZIP4格式。只有ZIP4格式才必须使用连字符来分隔前5位和后4位数字。下面是一种解决方法文本111112222233333-44444-4444正则表达式\d{5}(-\d{4})?结果\d{5}匹配前5位数字​-\d{4}​匹配一个连字符和后4位数字它们必须一起出现或一起不出现​。现在请考虑这样一个问题如果你不想匹配那些格式不正确的ZIP编码你该怎么办比如说在上面这个例子里在第3行原始文本的末尾有一个不应该出现在那里的连字符但这个号码还是出现在了最终的匹配结果里。怎样才能让这个格式不正确的ZIP编码不出现在最终的匹配结果里呢下面是用一个前后查找条件来解决这个问题的方法虽然这个问题并非只有这一种解决办法。正则表达式\d{5}(?(?-)-\d{4})结果分析\d{5}匹配前5位数字。接下来是一个?? --\d{4}形式的向前查找条件。这个条件使用了-来匹配但不消费一个连字符如果条件得到满足那个连字符存在, -\d{4}将匹配那个连字符和随后的4位数字。这样一来33333-将被排除在最终的匹配结果之外它有一个连字符所以满足给定条件但那个连字符的后面没有必须出现在那里的4位数字​。

相关新闻

正则表达式——前后查找

正则表达式——前后查找

前后查找1、前后查找2、向前查找3、向后查找4、把向前查找和向后查找结合起来5、对前后查找取非1、前后查找 我们还是先来看一个例子&#xff1a;你要把一个Web页面的页面标题提取出来。HTML页面标题是出现在<TITLE>和</TITLE>标签之间的文字&#xff0c;而这对标…

2026/8/6 23:32:19 阅读更多 →
企业网络监控工具选型与OpManager实践指南

企业网络监控工具选型与OpManager实践指南

1. 网络监控工具的现状与挑战 2026年的企业网络环境已经变得前所未有的复杂。随着物联网设备数量突破千亿级别、5G/6G网络全面普及、边缘计算节点激增&#xff0c;传统的网络监控方案正在面临严峻挑战。我曾参与过多个大型企业的网络架构升级项目&#xff0c;亲眼目睹了管理员们…

2026/8/6 19:13:46 阅读更多 →
三阶进化论:从数据采集到生态构建的DouK-Downloader架构哲学

三阶进化论:从数据采集到生态构建的DouK-Downloader架构哲学

三阶进化论&#xff1a;从数据采集到生态构建的DouK-Downloader架构哲学 【免费下载链接】TikTokDownloader TikTok 发布/喜欢/合辑/直播/视频/图集/音乐&#xff1b;抖音发布/喜欢/收藏/收藏夹/视频/图集/实况/直播/音乐/合集/评论/账号/搜索/热榜数据采集工具/下载工具 项目…

2026/8/5 14:41:29 阅读更多 →

最新新闻

RS_ASIO缓冲区深度调优:从原理到实战,彻底解决音频延迟与爆音

RS_ASIO缓冲区深度调优:从原理到实战,彻底解决音频延迟与爆音

1. 从“能用”到“好用”&#xff1a;为什么你需要关注RS_ASIO的缓冲区&#xff1f;如果你玩过Rocksmith&#xff0c;并且因为原版游戏那恼人的音频延迟而头疼过&#xff0c;那么RS_ASIO这个工具对你来说可能已经是老朋友了。它通过绕过Windows的通用音频驱动&#xff0c;直接调…

2026/8/7 2:41:36 阅读更多 →
告别课程论文熬夜难产!毕夏 AI 官网(www.bixiaai.com)一站式科研写作功能全科普

告别课程论文熬夜难产!毕夏 AI 官网(www.bixiaai.com)一站式科研写作功能全科普

临近结课季&#xff0c;课程论文成为众多大学生的共同难题&#xff1a;选题摇摆不定、文献梳理杂乱无章、章节逻辑断层、格式调整耗费整日心血、初稿重复率超标反复修改。不少同学依靠碎片化搜索、零散文案拼凑完成论文&#xff0c;不仅文章质量单薄&#xff0c;还极易出现学术…

2026/8/7 2:41:36 阅读更多 →
Python ModuleNotFoundError 深度解析:从环境隔离到依赖管理的完整解决方案

Python ModuleNotFoundError 深度解析:从环境隔离到依赖管理的完整解决方案

1. 从一次深夜报错说起&#xff1a;为什么“ModuleNotFoundError”是Python开发者的必修课 凌晨两点&#xff0c;屏幕上的红色错误信息格外刺眼。你刚刚从GitHub上clone了一个看起来很酷的项目&#xff0c;满心期待地运行 python main.py &#xff0c;准备一睹其风采。然而&…

2026/8/7 2:41:36 阅读更多 →
三相四桥臂离网逆变器CCS-MPC控制:Simulink建模与不平衡负载抑制

三相四桥臂离网逆变器CCS-MPC控制:Simulink建模与不平衡负载抑制

1. 项目概述&#xff1a;从“离网”到“精准控制”的挑战在电力电子和电机驱动领域&#xff0c;离网型逆变器是一个经典且充满挑战的课题。它不像并网逆变器那样&#xff0c;可以依赖电网这个“巨无霸”来维持电压和频率的稳定。离网系统&#xff0c;尤其是给不平衡或非线性负载…

2026/8/7 2:41:35 阅读更多 →
中台架构实战:基于DDD与微服务构建多端统一业务平台

中台架构实战:基于DDD与微服务构建多端统一业务平台

1. 项目概述&#xff1a;为什么“中台”成了我们团队的救命稻草&#xff1f;几年前&#xff0c;我们团队负责的业务线从两条激增到八条&#xff0c;每个业务都催生着自己的小程序、PC端管理后台&#xff0c;甚至还有面向合作伙伴的Web端门户。那段时间&#xff0c;开发状态堪称…

2026/8/7 2:41:35 阅读更多 →
自然光与原相机:文玩核桃真实品鉴的标准化拍摄指南

自然光与原相机:文玩核桃真实品鉴的标准化拍摄指南

在文玩核桃的收藏和鉴赏过程中&#xff0c;光源和拍摄设备的选择&#xff0c;对最终呈现的视觉效果有着决定性的影响。许多新手玩家&#xff0c;甚至部分资深藏家&#xff0c;都曾遇到过这样的困惑&#xff1a;为什么自己手中的核桃&#xff0c;在商家图片里色泽红润、纹理深邃…

2026/8/7 2:40:35 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案&#xff1a;完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上&#xff0c;享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select&#xff1a;打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手&#xff1a;NSZ压缩工具终极指南&#xff0c;轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →