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

秒懂正则表达式

正则表达式的功能很强大,但是他的语法往往难以学会和掌握,即使学会了也容易忘记,即掌握的不深刻。下面我就试图通过简单的讲解让大家迅速深刻的掌握正则表达式。本文以javascript中的正则表达式语法为范例讲解。

一、从最简单的表达式开始

所谓最简单就是没有任何算符,表达式就是目标字符串。

示例文本:The company denied using a "hunger sales" strategy and said the products will be delivered starting April 8.

匹配company:/company/
匹配products:/products/

二、方括号[]的使用

含义:方括号中整体代表一个字符,所代表的字符就是方括号中所列出的字符中的其中一个。

示例文本:A teacher began his class by holding up a glass with some water in it. 

同时匹配class和glass:/[cg]lass/g   

注:表达式末尾的g代表全局匹配,既global

三、连接符-的使用

含义:连接符表示范围,连接符左右两端的字符为范围的第一个和最后一个字符。

示例文本:Activity set to honor PLA Navy birthday.

匹配所有的大写字母:
1:/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/g
2:/[A-Z]/g

四、脱字符^的使用

含义:脱字符放在方括号内的第一个位置,表示不匹配方括号中列出的字符。

示例文本:Activity set to honor PLA Navy birthday.

与任何不是字符A的字符匹配:/[^A]/g
与任何不是大写字母的字符匹配:/[^A-Z]/g

五、问号?的使用

含义:问号前面的字符有或无。

示例文本:color is equal to colour.

同时匹配color和colour:/colou?r/g

*六、星号的使用**

含义:星号前面的字符不出现或出现若干次。

示例文本:ba!baaa!baabaabb!baaaaaaa!abbbaabbab!

匹配ba!  baaa!  b!  baaaaaaa!等的表达式:/ba*!/g 

匹配ba!  baaa!  baabaabb!  baaaaaaa!  abbbaabbab!的表达式:/[ab]*!/g

七、加号+的使用

含义:加号前面的字符出现一次或若干次,即至少出现一次。

示例文本:ba!baaa!baabaabb!baaaaaaa!abbbaabbab!

将 /ba*!/g 改为 /ba+!/g 的匹配结果是:ba!  baaa!  baaaaaaa!

八、点号 . 的使用


 点号是通配符,表示与任何单个字符(回车符除外)相匹配。

 经常与星号结合使用,.*可以表示任意字符串。

示例文本:The company denied using a "hunger sales" strategy and said the products will be delivered starting April 8.

匹配using到products的字符串:/using.*products/g

九、常用锚号的使用

含义:锚号是让表达式匹配文本的特定位置的符号。

    示例文本:The apple is Green.the other one is also green

    脱字符(^),表示匹配行首
    例如匹配行首的The:/^the/ig
  注:表达式后面的i字母表示忽略大小写。

    美元符($),表示匹配行尾
   例如匹配行尾的green:/green$/ig

    词界(\b)
   例如要匹配单词the,而不是other中包含的‘the’: /\bthe\b/ig

十、析取算符|与括号()的使用

含义:析取算符表示或关系;括号中是子正则表达式。

示例文本:A cat is talking with a dog,guppies are the complex form of guppy.

匹配cat、dog和guppy的表达式:/cat|dog|guppy/g

匹配guppy与guppies的表达式:/gupp(y|ies)/g

十一、计数符的使用

含义:计算符来规定它前面的字符或子表式出现的次数。

示例文本:ba!baaa!baabaabb!baaaaaaa!abbbaabbab!

星号*:表示前面的字符或子表达式出现零个或多个   /ba*!/g

加号+:表示前面的字符或子表达式出现一个或多个   /ba+!/g

问号?: 表示前面的字符或子表达式出现零个或一个(出现或不出现)  /ba?!/g

{n}:表示前面的字符或子表达式出现n个   
例如a要出现3次:/ba{3}!/g

{n,m}: 表示前面的字符或子表达式出现n到m个  
例如a出现的次数要在3到9之间:/ba{3,9}!/g

{n,}: 前面的字符或子表达式至少出现n个   /ba{5,}!/g
例如a至少要出现5次:/ba{5,}!/g

另外可以看博主视频课:秒懂正则表达式

转载于:https://blog.51cto.com/14223214/2360678

相关文章:

  • 怎么把GPU上训练的模型转到TPU或者CPU上去?DeepMind发布新工具支招
  • 互联网项目中mysql应该选什么事务隔离级别
  • 转载【阿里员工排查问题的工具清单,总有一款适合你】
  • 一、图书管理系统
  • 来自Google资深工程师的API设计最佳实践
  • grid布局基本概念
  • 论网站经营对一个企业的重要性
  • 持续交付基金会成立!Jenkins,Spinnaker等为首批捐赠项目
  • luogu P2634 [国家集训队]聪聪可可 点分治
  • link和@import的区别是什么 ?
  • 乞丐版的全栈实践
  • DRF教程1-序列化
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 一个iOS开发者的Flutter“历险记”
  • 12. 掌握Dart最基础的导包操作
  • 【RocksDB】TransactionDB源码分析
  • Gradle 5.0 正式版发布
  • HTTP中的ETag在移动客户端的应用
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • JS函数式编程 数组部分风格 ES6版
  • mysql外键的使用
  • Ruby 2.x 源代码分析:扩展 概述
  • SQLServer之创建显式事务
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云购买磁盘后挂载
  • 多线程 start 和 run 方法到底有什么区别?
  • 聊聊flink的TableFactory
  • 码农张的Bug人生 - 见面之礼
  • 设计模式走一遍---观察者模式
  • 详解移动APP与web APP的区别
  • kubernetes资源对象--ingress
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #AngularJS#$sce.trustAsResourceUrl
  • #define、const、typedef的差别
  • #stm32驱动外设模块总结w5500模块
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)STL算法之比较
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)ssm码农论坛 毕业设计 231126
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (转)shell调试方法
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 中的轻量级线程安全
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET企业级应用架构设计系列之开场白
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • /3GB和/USERVA开关
  • @ResponseBody
  • [Codeforces] number theory (R1600) Part.11
  • [delphi]保证程序只运行一个实例
  • [docker] Docker容器服务更新与发现之consul