正则表达式(regular expression 简称regex) 是一种工具,和其它工具一样是为了解决某一类问题而发明的。正则表达式是一些用来匹配和处理文本的字符串。平时主要用于查找和替换符合相应模式的文本,而该模式,就是由正则表达式所定义。需要注意的是,使用正则表达式对字符串进行匹配,正则表达式的编写方案并不是唯一的,同一个问题,往往会有多种方案。同时,需要注意的是正则表达式的语法是区分大小写的即\d和\D表示的是不同的意思。

正则表达式的特殊字符及其含义如下:

  • . 用来匹配任意单个字符,当字符本身为“.”时,需要使用\来对其进行转义即(\.用于表示.这个字符本身,而不是任意单个字符。在绝大多数的正则表达式的实现里,. 只能用于匹配除了换行符以外的任何单个字符)
  • []用来定义一个字符集合。其表示在[]中所包含的字符的其中一个类似与sql语句中的in的作用。在[]中,可以使用“-”来表示一个集合的范围,例如[1-9]和[0123456789]是等价的,当然,其不仅限于数字,以下的也是合法的字符区间:
  1. A-Z:匹配从A到Z的所有大写字母
  2. a-z:匹配从a到z的所有小写字母
  3. A-F:匹配从A到F的所有大写字母
  4. A-z:匹配从ASCII字符A到ASCII字符z的所有字母,该模式不常用,因为其还包含着[和^等在ASCII字符表里排列在Z和a之间的字符。可以在一个字符集合中给出多个字符区间,例如[A-Za-z0-9]表示所有的数字和大小写字母
    同时,可以使用[^]用于表示需要匹配的字符不在该定义的集合区间中。当要匹配“[]”本身的时候,需要使用\来对其进行转义,即\[\]的形式表示[]本身。
  5. ps:对于转义字符\,若要表示该字符本身,需要使用\\来表示
  • 以下的均为空白符(即原始文本的中的非打印字符)
  1. \f用来匹配一个换页符
  2. \n用来匹配一个换行符
  3. \r用来匹配一个回车符
  4. \t用来匹配一个制表符
  5. \v用来匹配一个垂直制表符
  6. 需要注意的是,\r\n是windows所使用的文本行结束标签,Unix和Linux系统只使用一个换行符来结束一个文本行;换句话说,在Unix/Linux系统上匹配空白行只用\n即可,不需要加上\r。还有一点是,f、n、r、t、v等字符本身是普通的字符,当用其来匹配空白符的时候,需要对其进行转义。
  • 以下的字符用来匹配一些打印字符
  1. \d用于匹配任意一个数字,其等价于[0-9]
  2. \D用于匹配任意一个非数字字符,其等价于[^0-9]
  3. \w用于匹配任意一个字母字符(包括大小写)和数字字符或下划线字符,等价于[0-9A-Za-z_]
  4. \W用于匹配任意一个非字母(包括大小写)数字或下划线字符,等价于[^0-9A-Za-z_]
  5. \s用于匹配任意一个空白字符,等价于[\f\n\r\t\v]
  6. \S用于匹配任意一个非空白字符,等价于[^\\f\\n\\r\\t\\v]
  7. \x用于匹配某个特定字符的十六进制,例如\x0A对应于ASCII码字符10,其效果等价于\n
  8. \0用于匹配某个特定字符的八进制,例如\011对应于ASCII码中的字符9,其等价于\t
  • POSIX字符类:
  1. [:alnum:]用于匹配任意一个字母或数字(等价于[a-zA-Z0-9])
  2. [:alpha:]用于匹配任意一个字母(等价于[a-zA-Z])
  3. [:blank:]用于匹配空格或制表符(等价于[\t ]注意的是,t后面有一个空格)
  4. [:cntrl:]用于匹配ASCII码控制字符(ASCII码0到31,再加上ASCII码127)
  5. [:digit:]用于匹配任意一个数字(等价于[0-9])
  6. [:print:]用于匹配任意一个可打印字符
  7. [:graph:]和[:print:]一样,但是不包括空格
  8. [:lower:]用于匹配任意一个小写字母(等价于[a-z])
  9. [:upper:]用于匹配任意一个大写字母(等价于[A-Z])
  10. [:punct:]用于匹配既不属于[:alnum:]也不属于[:cntrl:]的任何一个字符
  11. [:space:]用于匹配任意一个空白符,包括空格(等价于[^\f\n\r\t\v ]v后面还有一个空格)
  12. [:xdigit:]用于匹配任何一个十六进制数字(等价于[a-fA-F0-9])
  • POSIX字符类的使用举例:

    [[:xdigit:]]可以用于匹配A和F等16进制的数字。需要注意的是,POSIX字符类必须括在[:和:]之间。外层的[]用于定义一个字符集合

  • 重复匹配:
  1. +用于匹配前一个字符一个或者多个,至少匹配一个,不匹配零个字符的情况。如果要匹配+本身这个字符,需要对该字符进行转义即\+用于表示“+”这个字符本身。
  2. *用于匹配零个或多个字符,如果要匹配*本身,需要对该字符进行转义,即\*表示字符“\*”本身。
  3. ?用于匹配一个字符的零个或者一个,最多不能超过一个。如果要匹配字符?本身,则需要对字符?进行转义,即\?表示匹配字符“?”本身。
  4. {m}用于匹配前一个字符m次,且必须是m次,少一次都不能进行匹配,需要注意的是,要匹配字符“{”和字符“}”,需要对其进行转义,即\{和\}用于匹配“{”和“}”字符本身。
  5. {m,n}用于匹配前一个字符最少m次,最多n次。
  6. {m,}用于匹配前一个字符至少m次,即匹配m次或理论上得无限次。
  • 需要注意的是,*和+以及{m,}都是贪婪型的匹配,其在进行模式匹配的时候,会尽可能的从一个文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头碰到第一个匹配的为止。要使其在碰到文本的第一个匹配为止就结束匹配,则应当将*和+以及{m,}变成懒惰匹配。变成懒惰匹配的方法是在*和+以及{m,}之后加上一个?使其在遇到合适的匹配的时候,就结束模式的匹配。

  • 贪婪型匹配的一个例子:

    文本:This offer is not available to customers living in <B>AK</B> and <B>HI</B>

    正则表达式:<[Bb]>.*</[Bb]>

    其匹配的结果是<B>AK</B> and <B>HI</B>

    正则表达式修改为<[Bb]>.*?</[Bb]>

    其匹配的结果:<B>AK</B> <B>HI</B>

  • 位置匹配:

    位置匹配用来解决在什么地方进行字符串匹配操作的问题。

  1. \b用来匹配一个单词的开始或结尾。需要注意的是,如果想匹配一个完整的单词,则必须在需要进行匹配的单词前后均加上一个\b。例如:\bcat\b用于匹配单词cat,而无法匹配scatter。而且需要注意的是,\b只是对位置进行匹配,而不匹配任何字符。
  2. \B用于表明不匹配一个单词的边界即字母数字下划线之间,或者非字母数字下划线之间
    ^用于匹配字符串的开头,即整个文本的开头。当要匹配字符^本身的时候,需要对其进行转义处理,即\^用于匹配字符“^”本身
  3. $用于匹配字符串的结尾,即整个文本的结尾。当要匹配字符$本身的时候,需要对其进行转义处理,即$用于匹配字符“$”本身

回到目录|·(工)·)

K:正则表达式之基础简介的更多相关文章

  1. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  2. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  3. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  4. 1.CSS基础简介

    一.基础简介 1.简介 CSS(Cascading Style Sheet)可译为“层叠样式表”或“级联样式表”,它定义如何显示 HTML 元素,用于控制Web页面的外观.通过使用CSS实现页面的内容 ...

  5. 1.bootstrap基础简介

    一·基础简介 1.Bootstrap,来自 Twitter,是一个用于快速开发 Web 应用程序和网站的前端框架,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CSS.JavaSc ...

  6. Android MediaPlayer 基础简介

    本文链接: Android MediaPlayer 基础简介 简单介绍MediaPlayer的基本概念,状态,常用的方法与监听器. 什么是MediaPlayer MediaPlayer类可以用来播放音 ...

  7. Java正则表达式入门基础篇

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  8. 最基础的分类算法-k近邻算法 kNN简介及Jupyter基础实现及Python实现

    k-Nearest Neighbors简介 对于该图来说,x轴对应的是肿瘤的大小,y轴对应的是时间,蓝色样本表示恶性肿瘤,红色样本表示良性肿瘤,我们先假设k=3,这个k先不考虑怎么得到,先假设这个k是 ...

  9. 正则表达式-linux基础

    通配符 通赔符是模糊匹配的基础,因为通赔符机制的存在使得我们在查找文件的时候非常方便     * :匹配任意长度的任意字符,也可以一个都没有     .  :匹配任意单个字符,必须有一个    [ ] ...

随机推荐

  1. Jackson将json string转为Object,org.json读取json数组

    从json文件读取json string或者自定义json string,将其转为object.下面采用的object为map,根据map读取json的某个数据,可以读取第一级的数据name,后来发现 ...

  2. Opticks依赖库的下载和编译

    最近下载Opticks的代码编译,用其自带的retrieve-dependencies.bat下载依赖库,总是提示缺少模块. 分析了一下错误原因,根据命令窗的提示,手动下载如下配置文件: https: ...

  3. java.util.ArrayList、java.util.vector和java.util.LinkedList (JDK 1.8.0_111)

    一.java.util.ArrayList 1.1 ArrayList 继承结构 ArrayList实现了RandomAccess,可以随机访问(其实就是通过数组下标访问):实现了Cloneable, ...

  4. Android IntentService的使用和源码分析

    引言 Service服务是Android四大组件之一,在Android中有着举足重轻的作用.Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处于后台工作而有没有UI界 ...

  5. Express4.x API (二):Request (译)

    写在前面 最近学习express想要系统的过一遍API,www.expressjs.com是express英文官网(进入www.epxressjs.com.cn发现也是只有前几句话是中文呀~~),所以 ...

  6. 《Android源代码设计模式解析与实战》读书笔记(十四)

    第十四章.迭代器模式 迭代器模式,又叫做游标模式.是行为型设计模式之中的一个.我们知道对容器对象的訪问必定会涉及遍历算法.我们能够将遍历的方法封装在容器中,或者不提供遍历方法,让使用容器的人自己去实现 ...

  7. Android-Volley网络通信框架(ImageRequest,ImageLoader,NetWorkImageView)

    1.回想 上篇已经学习了,RequestQueue  , StringRequest ,JsonObjectRequest 的使用 2.重点 (1)Volley请求图片的三种方式 (2)ImageRe ...

  8. java多线程编程核心技术——第六章总结

    目录 1.0立即加载/"饿汉式" 2.0延迟加载/"懒汉式" 3.0使用静态内置类实现单例模式 4.0序列化与反序列化的单例模式实现 5.0使用static代码 ...

  9. node.js之路由,中间件,ge请求和post请求的参数

    一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 1 app.get(" ...

  10. bootstrap插件summernote 的使用

    一.有时Java工程中会用到summernote 编辑器,下面简单说一下引用 1.将summernote 相应的文件放到工程中(webapp下面) 2.建一个jsp文件,在文件中引入相应的js.css ...