点符号(.)匹配几乎任何字符

在正则表达式中,点符号.是最常用的元字符,也是最被滥用的元字符。

点符号.匹配单个字符,不管是什么字符,为一的例外就是换行符。本教程中所涉及到的正则表达式,点符号.默认情况下不会匹配一个换行符,所以这点符号.其实就是[^\n](Unix环境下)或者[^\r\n] (Windows 环境下)的简写。

这个例外的存在最可能是由于历史原因。第一个正则表达式工具是基于行的,他们一行一行的读文件,每一行各自去匹配正则表达式。这个影响就是,使用这些工具,字符串中不会出现换行符,所以点符号.不会去匹配他们。现在的工具和语言可以让正则表达式作用于大字符串甚至整个文件。本教程中讨论的正则表达式都能设置成使之匹配包括换行符。 在RegexBuddy, EditPad Pro 或者 PowerGREP中,只需勾选中选项"dot matches newline"。

在Perl中,匹配换行符的模式称作单行模式。有点不幸的是,这很容易和术语“多行模式“搞混。多行模式只影响锚,单行模式只影响点符号(.)。你可通过在正则表达式后面加上一个s来激活单行模式,例如m/^regex$/s。

其他语言和正则表达式也采用了Perl的术语。当使用.NET的正则表达式库的时候,需要通过指定RegexOptions.Singleline激活单行模式。例如Regex.Match("string", "regex", RegexOptions.Singleline).

在我所知的程序语言和正则表达式库中,激活单行模式除了让点符号匹配换行符之外没有别的效用。

javascript和VBScript没有让点符号.匹配换行符的选项。着这些语言里,你可以使用字符集,比如 [\s\S] 来匹配任意字符。这个字符集匹配一个空白符包括换行符或者不是空白符,这就逻辑上等于匹配了任何字符。

保守的使用点符号点符号.

点符号.是一个强力的正则字符,让你变懒。但是点符号.也会让你匹配不该匹配的字符。如果你初学正则表达式,最初的一些情况你可能不是很清楚。

举例说明。比如要匹配日期mm/dd/yy,但是允许用户自己选择分隔符。快速的解决方法是\d\d.\d\d.\d\d.。看上去不错,会匹配02/12/03 。但是麻烦是,它也会匹配02512703,这不是我们想看到的。

\d\d[- /.]\d\d[- /.]\d\d 才是较好的解决方案。注意,点符号.在字符集中不属于元字符,所以你不需要转义。

但这个正则表达式仍然不完美,因为她匹配99/99/99,[0-1]\d[- /.][0-3]\d[- /.]\d\d稍微完美一点,但是它匹配19/39/99。要多完美,取决于想怎么做。如果用来验证用户输入,这不完美。如果用来转换数据文件,这个可能就足够。

使用否定的字符集替代点符号.

假设你想要匹配一个引号包括的字符串,听起来简单。引号里包含任何个数的任何字符,".*"似乎很不错,点符号.匹配任何字符,星号*表示重复任何次数,包括0,如果你把正则表达式应用于Put a "string" between double quotes这句话,很好的匹配"string"。如果应用于 Houston, we have a problem with "string one" and "string two". Please respond.那么匹配的是?"string one" and "string two"。不是我们想要的,因为星号*是贪婪的。

在日期匹配的例子中,我们用字符集替代点符号来改善正则表达式,这里我们也是相同做法。对于双引号内的字符串的定义是错误的。不想让任何字符以任何次数的形式出现在引号中,而是希望任何不是双引号和换行符的字符以任何次数的形式出现在双引号内。所以恰当的正则表达式是"[^"\r\n]*"。

正则表达式入门教程-连载(4)-点符号(.)相关推荐

  1. 正则表达式入门教程-连载(2)-正则表达式引擎怎么工作的

    看一下内部引擎如何工作 知道正则表达式引擎如果工作可以让你很容易的构造出更好的正则表达式.这会帮助你理解为什么有的正则表达式并不如你预期的那样工作,这会帮你省下很多时间. 有2种正则表达式引擎,文本导 ...

  2. 推荐 正则表达式入门教程

    看到编写比较好而且学习时间比较短的教程,很不错哦.推荐给大家学习. 正则表达式30分钟入门教程 转载于:https://blog.51cto.com/bearstudyhard/299713

  3. 正则表达式入门教程经典Javascript正则表达式(share)

    前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...

  4. zybo的linux开发教程,Zybo全栈开发入门教程——连载三:创建Linux设备驱动和应用程序...

    作者:Commanderfranz,编译: kenshin 通过前面两篇文章我们不仅创建的自定义IP模块还移植了Linux操作系统,今天这篇文章的内容是将这两部分联系起来,其实我们创建的myLed I ...

  5. 绿色版的正则表达式测试工具及正则表达式入门教程

    下载网址:https://download.csdn.net/download/xyz846/10856604 RegexTester是一款正则表达式测试器,支持单行模式.多行模式,经典的窗口设计,该 ...

  6. PHP正则表达式入门教程[转]

    思维导图 点击下图,可以看具体内容! 介绍 正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,php等等,我今天就把我对正则表 ...

  7. python正则表达式入门教程括号及字符

    数据分析遇到字符串处理会有两个阶段涉及到正则表达式,一个是在数据库阶段一个是Python处理阶段.作为一个小白学习正则也遇到很多弯路和难理解的点,今天就梳理梳理学习的过程. hive里面正则表达式可以 ...

  8. 超简单正则表达式入门教程

    你好呀,我是阿德. 正则表达式是在程序或命令行中查找和替换文本的强大工具.熟悉最常见的正则表达式符号,以及如何使用它们,对于程序员来说是必不可少的技能. 正则表达式是在搜索中需要匹配的特殊字符串,使用 ...

  9. js 获取中括号里面字符串_西门子SCL编程入门教程连载(18)——字符串

    今天这篇文章,我们来聊聊西门子S7系列PLC的一种数据类型--字符串. 本文包括如下几个主题: 什么是字符串: 怎样声明字符串变量: 怎样给字符串变量赋值: 1.什么是字符串 字符串(string)是 ...

最新文章

  1. 20210810 所有图像数据准备一条龙(labelme_json转mask、数据增强Augmentor、随机种子设比例生成train.val、转格式(.jpg转.png)、尺寸、位深度变换
  2. DOM渲染的详细过程
  3. Hopfield 网络(下)
  4. 文字超长自动加省略号的css写法
  5. linux中sed的基本用法,linux sed用法
  6. php 168任意代码执行漏洞之php的Complex (curly) syntax
  7. matlab八个实验报告中文版,Matlab实验报告8
  8. [BZOJ 2434][Noi2011]阿狸的打字机(AC自动机+树状数组+dfs序)
  9. 修正线性单元(Rectified linear unit,ReLU)
  10. 2_RabbitMQ工作模式_Work queues_Publish/Subscribe_Routing_Topics_HeaderRpc
  11. 索引多维数组_PHP数组–索引,关联和多维
  12. 【SICP练习】142 练习3.77
  13. 【正则】正则表达式基础知识大全
  14. 计算机组成原理 - 系统总线
  15. java中strlen,浅析C++中strlen函数的使用与模拟实现strlen的方法
  16. 函数进阶 call apply bind 的区别
  17. 解决虚拟机不能连接外网问题
  18. Algorithm Gossip: 最大访客数
  19. 光纤收发器的原理及应用_浅析光纤收发器的原理与分类
  20. 西安互联网公司防坑指南

热门文章

  1. amd显卡显存测试程序_AMD发布Radeon 6000系列显卡:能耗比大提升
  2. 周报速递丨北交所 SaaS 首股将出;央行等印发《金融标准化“十四五”发展规划》
  3. 四部门联合印发《常见类型移动互联网应用程序必要个人信息范围规定》
  4. 计算机如何读懂“人话”?五分钟了解文本挖掘那些事儿
  5. python 长连接 mysql数据库
  6. 德国Renusol进军南非市场 瞄准屋顶光伏
  7. 浅谈ORACLE AWR single instance 一
  8. 禁止UDP端口引起DNS错误导致邮局无法外发的故障
  9. zabbix 2.2自动安装脚本
  10. 6.LibSVM核函数