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

正则表达式——匹配单个字符

匹配单个字符

    • 1、匹配纯文本
      • 1.1、有多个匹配结果
      • 1.2、字母的大小写问题
    • 2、匹配任意字符
    • 3、匹配特殊字符

1、匹配纯文本

Ben是一个正则表达式。因为本身是纯文本,所以看起来可能不像是一个正则表达式,但它的确是。正则表达式可以包含纯文本(甚至可以只包含纯文本)​。当然,像这样使用正则表达式是一种浪费,但把它作为我们学习正则表达式的起点还是很不错的。

我们来看一个例子:

文本:

Hello, my name is Ben. Please visit my website at http://www.forta.com/.

正则表达式:

Ben

结果:

我们再来看一个例子,它使用了与刚才相同的原始文本和另外一个正则表达式:

文本:

Hello, my name is Ben. Please visit my website at http://www.forta.com/.

正则表达式:

my

结果:

my也是静态文本,它在原始文本里找到了两个匹配结果。

1.1、有多个匹配结果

绝大多数正则表达式引擎的默认行为是只返回第1个匹配结果。具体到上面那个例子,原始文本里的第1个my通常是一个,但第2个往往不是。

怎样才能把两个或更多个匹配结果都找出来呢?绝大多数正则表达式的实现都提供了一种能够把所有的匹配结果全部找出来的机制(通常返回为一个数组或是其他的专用格式)​。比如说,在JavaScript里,可选的g(意思是“global”​,全局)标志将返回一个包含着所有匹配的结果数组。

1.2、字母的大小写问题

正则表达式是区分字母大小写的,所以Ben不匹配ben。不过,绝大多数正则表达的式实现也支持不区分字母大小写的匹配操作。比如说,JavaScript用户可以用i标志来强制执行一次不区分字母大小写的搜索。

2、匹配任意字符

前面见到的正则表达式都是些静态的纯文本,它们根本体现不出正则表达式的威力。下面,我们一起来看看如何使用正则表达式去匹配不可预知的字符。

在正则表达式里,特殊字符(或字符集合)用来给出要搜索的东西。.字符(英文句号)可以匹配任何一个单个的字符。

提示 如果你曾经使用过DOS的文件搜索功能,你将发现正则表达式里的.字符相当于DOS的?字符。SQL用户将注意到正则表达式里的.字符相当于SQL中的_下划线)字符。

于是,用正则表达式c.t进行的搜索将匹配到cat和cot(还能匹配到一些毫无意义的单词)​。

文本:

sales1.xls orders3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xl2 sa1.xls

正则表达式:

sales.

结果:

正则表达式sales.将把由字符串sales和另外一个字符构成的文件名查找出来。9个文件里有3个与这个模式(pattern)相匹配。

正则表达式可以用来匹配包含着字符串内容的模式。匹配的并不总是整个字符串,而是与某个模式相匹配的字符——即使它们只是整个字符串的一部分。在上面的例子里,我们使用的正则表达式并不能匹配整个文件名,它只匹配了文件名的一部分。如果你需要把某个正则表达式的匹配结果传递到其他代码或应用程序里做进一步处理,就必须记住这一细节差异。

.字符可以匹配任何单个的字符、字母、数字甚至是.字符本身。

文本:

sales.xls sales1.xls orders3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xl2 sa1.xls

正则表达式:

sales.

结果:

这个例子比上一个多了一个sales.xls文件。因为.能够匹配任何一个单个的字符,所以这个文件也与模式sales.相匹配。

在同一个正则表达式里允许使用多个.字符,它们既可以连续出现(一个接着一个——..将匹配任意两个字符)​,也可以间隔着出现在模式的不同位置。

我们再来看一个使用了相同原始文本的例子:把以na(表示北美)或sa(表示南美)开头的文件(不管它们后面跟着一个什么数字)找出来。

文本:

sales1.xls orders3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xl2 sa1.xls

正则表达式:

.a.

结果:

正则表达式.a.把na1、na2和sa1找了出来,但它同时还找到了4个预料之外的匹配结果。为什么会这样?因为我们使用的模式将与第2个字符是a的任意3个字符相匹配。

我们真正需要的是后面再紧跟着一个英文句号的.a.的模式。我们再来试一次:

正则表达式:

.a..

结果:

.a..并不比.a.好多少;新增加的.将匹配任何一个多出来的字符(不管它是什么)​。既然.是一个能够与任何一个单个字符相匹配的特殊字符,我们怎样才能搜索.本身呢?

3、匹配特殊字符

.字符在正则表达式里有着特殊的含义。如果模式里需要一个,就要想办法来告诉正则表达式你需要的是.字符本身而不是它在正则表达式里的特殊含义。为此,你必须在.的前面加上一个\(反斜杠)字符来对它进行转义。\是一个元字符(metacharacter,表示“这个字符有特殊含义,而不是字符本身含义”​)​。

我们再来验证一次刚才的例子,这次我们使用了\.进行转义:

文本:

sales1.xls orders3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xls sa1.xls

正则表达式:

.a.\.xls

结果:

.a.\.xls解决了问题。第1个.匹配n(在前两个匹配结果里)或s(在第3个匹配结果里)​,第2个.匹配1(在第1个和第3个匹配结果里)或2(在第2个匹配结果里)​。接下来,\.匹配文件名与扩展名之间的分隔符.本身,最后的xls匹配它本身。​(事实上,即使没有最后面的xls,这次搜索的结果也会与我们预想的一样;加上xls可以避免匹配到诸如sa3.doc之类的文件名。​)

在正则表达式里,\字符永远出现在一个有着特殊含义的字符序列的开头,这个序列可以由一个或多个字符构成。刚才看到的是\.序列,在后面还会看到更多使用了\字符的例子。

如果需要搜索\本身,就必须对\字符进行转义;相应的转义序列是两个连续的反斜杠字符\\

我们刚才讲过,.可以匹配任何一个字符,这一说法并非绝对准确。在绝大多数的正则表达式实现里,.只能匹配除换行符以外的任何单个字符。

http://www.cnnetsun.cn/news/3838017.html

相关文章:

  • pdf-inspector:快速处理PDF,节省成本与延迟,本地生成结构化Markdown!
  • 如何免费快速实现Synology Photos人脸识别:终极完整指南
  • 2026年标讯查询服务性价比高的平台大盘点:全行业选型避坑指南及多家靠谱服务商深度解析
  • 5分钟掌握屏幕实时翻译:Translumo新手完整入门指南
  • 36种Cherry MX键帽3D模型:免费开源,5分钟开启个性化键盘定制之旅 [特殊字符]
  • FDE:AI时代的“宝藏岗位”,小白也能入局,速收藏!
  • 高速光储充电站物联网监控管理系统方案
  • ncmdumpGUI:3步完成网易云音乐NCM文件批量转换的终极方案
  • UE5中Matinee轨道系统深度解析:从核心原理到实战应用
  • 为什么92.7%的AI 3D生成项目卡在UV重拓扑?资深TD曝光内部验证过的5步自动化修复协议
  • EVERSPIN替代方案netsol串行STT-MRAM芯片
  • NETSOL MRAM芯片RAID系统应用方案
  • 一文读懂爆火 OpenClaw(小龙虾 AI):给大模型装上手脚的开源 AI 智能体框架
  • 转转官方验靠谱吗?四重兜底让二手交易有保障
  • 【独家解密】国家级AI治理实验室内部文档流出:AI数据治理框架成熟度评估五级量表(附自测工具)
  • 10个必知的PromEx插件:从BEAM到Phoenix的全方位监控方案
  • “有路就能开”的终极验证,猛士M817 高性能版用华为乾崑智驾ADS 5攀珠峰
  • 终极词典格式转换指南:PyGlossary让你在任何设备上自由使用离线词典
  • 如何部署aws-cognito-angular-quickstart到AWS:S3与Elastic Beanstalk完整指南
  • AMD 技术文档管理翻车实录:为什么我们的 ROCm 知识库变成死链接坟场?
  • Unity VR角色定位与朝向控制实战指南
  • 深入理解HTTP请求处理:Let‘s Build A Web Server请求响应机制详解
  • Bedrock Linux进阶技巧:如何高效管理多发行版软件包与依赖
  • Umi-OCR:从截图到批量PDF,免费开源的全能文字识别解决方案
  • Mmock回调与WebHook:构建事件驱动的API模拟系统
  • 论文格式总是调不对,有哪些便捷的AI论文写作软件推荐?
  • 运营商国密改造下审计数据加密存储与完整性校验体系构建实践
  • 德鲁克书籍和作品那么多,真正适合入门的是这一本
  • OpenMoHAA核心功能解析:从bug修复到现代平台支持的完整清单
  • 为什么选择Architectural Metapatterns?探索软件架构设计的黄金法则