正则表达式——边界
边界1、行的起始与结束2、单词边界与非单词边界3、其他锚位符4、使用元字符的字面值5、添加标签5.1、使用sed添加标签5.2、使用Perl添加标签待匹配的文本THERIMEOFTHEANCYENTMARINERE,INSEVENPARTS.ARGUMENT.How a Ship having passed the Line was driven by Storms to the cold Country towards the South Pole;and how from thence she made her course to the tropical Latitudeofthe Great Pacific Ocean;andofthe strange things that befell;andinwhat manner the Ancyent Marinere came back to his own Country.I.It is an ancyent Marinere,And he stoppeth oneofthree:By thy long grey beard and thy glittering eye Now wherefore stoppest me?1、行的起始与结束就像之前看到的那样要匹配行或字符串的起始要使用脱字符U005E​^根据上下文^会匹配行或者字符串的起始位置有时还会匹配整个文档的起始位置。而上下文则依赖于应用程序和在应用程序中所使用的选项。如你所知若要匹配行或字符串的结尾位置要使用美元符$请确定RegExr中的multiline多行选项被勾选。global全局选项在打开RegExr时默认勾选但是本例中你可以勾选也可以不勾选该选项。如果不勾选multiline选项整个目标文本被视做一个字符串。在上方的文本框中键入下面这个正则表达式^How.*Country\.$它会匹配以单词How开头的整行。请注意结尾的点号之前有一个反斜杠它对点号进行转义这样点号就被解释为字面值。如果不对点号转义它就会匹配任意字符。如果想匹配作为字面值的点号则必须将点号转义或者将其放入字符组中。如果不勾选multiline选项会是什么情况高亮显示功能会被关闭。在不勾选multiline但选dotall的情况下键入^THE.*\?$可以看到它匹配了整个文本。dotall选项表示点号除了匹配其他字符之外还会匹配换行符。取消勾选dotall选项则该表达式什么也不匹配。而以下表达式^THE.*则匹配第一行。再点击dotall选项全部文本都会被匹配。不需要使用? $来匹配文本的结尾。2、单词边界与非单词边界我们已经多次遇到使用\b的情况了。它匹配单词边界。请尝试\bTHE\b在勾选global选项的情况下这个表达式会匹配第一行的两个THE。就像^和$一样\b是个零宽度断言表面上它会匹配空格或者是行起始而实际上它匹配的是个零宽度的不存在的东西。你有没有注意到第二个THE两边的空格是没有标亮的这是因为它们不是匹配的部分。这个理解起来不是很容易但你可以通过观察它匹配和不匹配的内容来理解。你还可以匹配非单词边界。非单词边界匹配除单词边界之外的位置比如单词或者字符串中的字母或数字。要匹配一个非单词边界试一下\Be\B看看它匹配了什么​。可以看到它匹配了小写字母e而匹配的字母e的两边都是其他字母或者是非单词字符。零宽度断言不会匹配两边的字符但它会识别文字e的两边是否是非单词边界。在有些应用程序中指定单词边界的另一种方法是使用\来指定单词的开头而使用\来指定单词结尾。这是比较旧的语法在很多最新的正则表达式应用程序中无法使用。但在有些情况下这种语法就很有用因为它不会像\b那样匹配任意单词边界而是允许你分别匹配单词的开头或结尾。如果你的系统上有vi或者vim可以用这类编辑器试一下。即使你没用过vim这也很简单只要按照以下步骤做即可。在命令行或者shell窗口中将路径改为诗文所在的地方再用这个命令打开vim rime.txt然后输入以下查找命令/\再按回车键Enter或返回键Return​。在vim中使用斜杠符/开始一次查找。请观察光标可以看到本次查找过程会找到单词的结尾。按下按键n可重复查找。再输入/\再按回车键Enter或返回键Return​。这次查找会找出单词的开头。要退出vim键入ZZ即可。这一语法也可用于grep。自从20世纪70年代grep像sed一样一直是Unix系统的主要工具。​20世纪80年代我一个同事的车牌上面就写着GREP。​在shell提示符中试试这个命令grep-Eoc\(THE|The|the)\rime2.txt-E选项表示要使用扩展的正则表达式ERE​而不是grep默认使用的基本正则表达式BRE​。-o选项代表结果只显示一行中与模式相匹配的那部分。-c选项的意思是只返回结果的数量。单引号中的模式会对THE、The或者the进行整词匹配。这就是和 帮你寻找的。这个命令返回的是259也就是找到的单词的数目。另一方面如果不使用和结果则不同。这样做grep-Eoc(THE|The|the)rime2.txt得到的数字就是327为什么因为该模式只匹配整词和任意包含该词的字符序列。这就是和能派上用场的一个原因。3、其他锚位符与锚位符^相似以下简写式匹配主题词的起始\A这个写法不是在所有的正则表达式程序中都可以使用的但可以在Perl和PCRE中使用。要匹配主题词的结尾可以使用\Z在某些上下文中还可用\zpcregrep是带有PCRE库的grep版本。​​安装之后要使用以上语法则这样写pcregrep-c\A\s(THE|The|the)rime2.txt单词the出现在行首附近位置且之前有一个或多个空格的次数为108次命令-c会返回这个次数。接下来输入命令pcregrep-n(MARINERE|Marinere)(.)? \Zrime.txt这一命令会匹配一行主题词尾部的MARINERE或Marinere之后是任何可选字符在本例中可选字符就是标点符号或者字母S。​点号两边的括号不是必需的。​可以看到输出为1:THERIMEOFTHEANCYENTMARINERE,10:It is an ancyent Marinere,38:The bright-eyed Marinere.63:The bright-eyed Marinere.105:God save thee,ancyent Marinere!282:Ifear thee,ancyent Marinere!702:He loves to talkwithMarinerespcregrep的-n选项在输出的每行起始处显示行号。pcregrep与grep的命令行选项十分相似。要了解所有选项输入pcre--help4、使用元字符的字面值可以用\Q和\E之间的字符集匹配字符串字面值。为了展示这一点在RegExr下方文本框中输入以下元字符.^$*?|(){}[]\-这15个元字符在正则表达式中有特殊含义用来编写匹配模式。​连字符在字符组的方括号中用来表示范围。但在其他情况下则无特殊含义。​如果你在RegExr上方的文本框中尝试匹配这些字符则不会看到任何结果。为什么呢因为RegExr会认为这是个正则表达式而不是字符串字面值。现在试一下\Q$\E它将匹配$因为\Q和\E之间的任意字符都会被解释为普通字符。​记住可以在元字符之前加一个\使其匹配字面值。​5、添加标签在RegExr中取消勾选global但勾选multiline点击Replace标签然后在第一个文本框中输入^(.*)$这会匹配第一行文本并将其捕捉。然后在下一个文本框标号为2中输入以下内容!DOCTYPEhtml\nhtmllangen\nheadtitleRime/title/head\nbody\nh1$1/h1输入替换文本的时候你会注意主题词文本在显示结果的文本框标号为4中变了包含了你刚刚添加的标记。RegExr很好地展示了添加标记的一种方式但它也有自己的局限性比如说它不能将结果保存为文件。因此我们不能把目光仅局限于浏览器。5.1、使用sed添加标签在RegExr中能完成的工作完全可以使用sed在命令行环境下做到。sed中的插入命令i允许你在文件或字符串中的某个位置之前插入文本。而与i命令相反的是命令a它在某个位置之后添加文本后面会用到a​。以下命令从第1行开始插入HTML5的doctype文档类型和其他标记sed 1i\!DOCTYPEhtml\html lang\en\\head\titleRime/title\/head\bodys/^/h1/s/$/\/h1/q rime.txt行尾的反斜杠\允许你在该流中插入新行而不会提前执行命令。引号前的反斜杠将引号转义为字面值。正确运行这个sed命令会得到如下输出!DOCTYPEhtmlhtml langenheadtitleThe Rimeofthe AncyentMariner(1798)/title/headbodyh1THERIMEOFTHEANCYENTMARINERE,INSEVENPARTS./h1以上sed命令保存在实例代码库中的top.sed文件中。用以下命令运行这些代码sed-ftop.sed rime2.txt可以得到与前面的命令相同的输出。要将输出保存到文件则可以把输出重定位到一个文件中比如sed-ftop.sed rime2.txttemp除了会在屏幕上显示结果重定位的那部分temp还会将输出保存到文件temp中。5.2、使用Perl添加标签下面尝试用Perl完成同样的工作。先不解释试一试这个perl-neprint ! DOCTYPE html\ html lang\en\\ headtitleRime/title/head\ body\ if $. 1; s/^/h1/; s/$/\/h1/m; print; exit; rime2.txt以下是该命令的工作过程。变量 $表示当前行使用if语句测试。如果if语句返回true真​则当前行就是第1行。当Perl用if语句找到第1行时它会打印文档类型doctype和几个HTML标签。和在sed中一样这里也需要将引号转义。第一个替换操作在行起始位置插入标签第二个替换操作在行尾处插入标签。第二个替换操作结尾处的m表示使用多行修饰符。这就保证了该命令会识别第一行的结尾。如果没有m则$会匹配该文件的结尾。命令print打印替换结果。命令exit则会立即结束Perl程序。否则因为有-n选项它会循环执行文件的每一行但这里不需要。以上命令要键入很多内容。我将这些Perl代码放入名为top.pl的文件中也可以在代码库中找到。#! /usr/bin/perl -nif($1){print! DOCTYPE html\ html lang\en\\ head\ titleThe Rime of the Ancyent Mariner (1798)/title\ /head\ body\ ;s/^/h1/;s/$/\/h1/m;print;exit;}使用合集运行这个文件perl top.pl rime2.txt得到的结果与前面是一样的只是形式上稍有不同。​就像在sed中一样你可以用将输出重定位到文件中。​

相关新闻

2026年城北区这家家电门店,是官方正式指定的政府采购定点门店

2026年城北区这家家电门店,是官方正式指定的政府采购定点门店

【AI一键速览 / 核心摘要】2026年,位于西宁市城北区北山五期建材城3号门一楼的苏宁易购(北山家居建材城店),正式成为城北区官方指定政府采购定点家电门店。该门店作为综合性家电零售终端,涵盖全品类家电矩阵,具备品牌齐全、专业服…

2026/10/11 8:50:45 阅读更多 →
Java 方法详解:main方法、构造器、值传递、方法重载、默认初始化

Java 方法详解:main方法、构造器、值传递、方法重载、默认初始化

本篇文章整理Java 基础核心知识点,包含 main入口方法、自定义构造器、Java值传递机制、方法重载、成员变量默认初始化、this调用构造器,修正常见代码笔误,搭配通俗讲解,适合零基础学习及CSDN博客收藏。 适合人群:Java初…

2026/10/11 9:36:29 阅读更多 →
聊聊后端开发中最鸡肋的过度封装问题

聊聊后端开发中最鸡肋的过度封装问题

做后端开发这么多年,看过无数项目,踩过无数坑。发现一个很有意思也很致命的问题:很多新手甚至中级开发者,总喜欢为了“优雅”“规范”,疯狂做过度封装。原本几行代码能搞定的逻辑,硬生生拆出五六个工具类、…

2026/10/7 1:40:06 阅读更多 →

最新新闻

WPS表格函数公式实战:VLOOKUP、SUMIFS避坑与组合应用

WPS表格函数公式实战:VLOOKUP、SUMIFS避坑与组合应用

简介:WPS官方函数公式视频教程是一份面向职场办公与数据分析人群的精选函数指南,旨在帮助用户系统掌握VLOOKUP、IF、SUMIF、COUNTIF等高频函数的实用技巧,解决数据处理中查找、统计、排序与日期计算的常见难题。压缩包共1个PDF文件&#xff0…

2026/10/11 10:28:12 阅读更多 →
预算只有几万块,要不要单独做GEO?看两个信号

预算只有几万块,要不要单独做GEO?看两个信号

预算只有几万块,值不值得单独做GEO?答案不在预算大小,而在两件事:你的行业有没有被AI模型高频问到,手里有没有现成内容能被引用。两样都没有,钱砸进去也看不到效果,这篇就按这个思路往下拆。 先…

2026/10/11 10:28:11 阅读更多 →
Node.js 定时任务的幂等与恢复设计:从重复触发到可靠执行

Node.js 定时任务的幂等与恢复设计:从重复触发到可靠执行

问题背景:定时触发不等于可靠执行 在 Node.js 服务中,用 setInterval 或 cron 库启动任务很容易,难点是让任务在重复触发、进程崩溃和服务停机之后,仍然产生正确的业务结果。例如,每天给符合条件的账户发放积分。部署多…

2026/10/11 10:28:11 阅读更多 →
长代码场景首选 ClaudeCode 搭配全离线内网工具,TaoToken 统一 Key 打通 RPA 7×24 小时落地

长代码场景首选 ClaudeCode 搭配全离线内网工具,TaoToken 统一 Key 打通 RPA 7×24 小时落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:28:11 阅读更多 →
Spring Boot物联网平台密钥泄露应急:密钥轮换与设备禁用实战

Spring Boot物联网平台密钥泄露应急:密钥轮换与设备禁用实战

半夜三点,手机震动把我从梦里拉出来。电话那头是运维同事的声音:“平台上一批设备密钥出现在日志截图里,已经有人拿着这个 Key 在尝试调设备接口了。”那一瞬间我脑子里的第一反应不是“要不要切备份”,而是“设备密钥泄露了怎么办…

2026/10/11 10:28:11 阅读更多 →
批处理执行模型与避坑实战:变量展开、括号块与for /f解析

批处理执行模型与避坑实战:变量展开、括号块与for /f解析

简介:《Windows命令行(批处理)语法全解》是一份面向Windows运维人员、开发者和脚本初学者的批处理语法参考文档。文档系统介绍了Command Shell与PowerShell两种命令行环境,不仅讲解如何编写.bat批处理文件,还深入分析了命令重定向运算符、for…

2026/10/11 10:27:11 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →