正则表达式学习 (一) 转
正则表达式到底是什么东西?
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。
入门
学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验。下面给出了不少简单的例子,并对它们作了详细的说明。
假设你在一篇英文小说里查找hi,你可以使用正则表达式hi。
这几乎是最简单的正则表达式了,它可以精确匹配这样的字符串:由两个字符组成,前一个字符是h,后一个是i。通常,处理正则表达式的工具会提供一个忽略大小写的选项,如果选中了这个选项,它可以匹配hi,HI,Hi,hI这四种情况中的任意一种。
不幸的是,很多单词里包含hi这两个连续的字符,比如him,history,high等等。用hi来查找的话,这里边的hi也会被找出来。如果要精确地查找hi这个单词的话,我们应该使用\bhi\b。
\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在)\w。 假如你要找的是hi后面不远处跟着一个Lucy,你应该用\bhi\b.*\bLucy\b。
这里,.是另一个元字符,匹配除了换行符以外的任意字符。*同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。因此,.*连在一起就意味着任意数量的不包含换行的字符。现在\bhi\b.*\bLucy\b的意思就很明显了:先是一个单词hi,然后是任意个任意字符(但不能是换行),最后是Lucy这个单词。
换行符就是'\n',ASCII编码为10(十六进制0x0A)的字符。 如果同时使用其它元字符,我们就能构造出功能更强大的正则表达式。比如下面这个例子:
0\d\d-\d\d\d\d\d\d\d\d匹配这样的字符串:以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为3位的情形)。
这里的\d是个新的元字符,匹配一位数字(0,或1,或2,或……)。-不是元字符,只匹配它本身——连字符(或者减号,或者中横线,或者随你怎么称呼它)。
为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。 这里\d后面的{2}({8})的意思是前面\d必须连续重复匹配2次(8次)。
转载于:https://www.cnblogs.com/bgli/archive/2011/11/04/2235752.html
正则表达式学习 (一) 转相关推荐
- java正则表达式 1,Java正则表达式学习(1)
Java正则表达式学习(一) 1.什么是正则表达式: 正则表达式(regular expressions) 是一种描述字符串集的方法,它是以字符串集中各种字符串的公有特征为依据的. 正则表达式可以用于 ...
- 正则表达式 学习笔记1.3
书接上一回: 实例五:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...
- 正则表达式 学习笔记4.3
下面看看逆序环视结构: public class GeneralSix { public static void main(String[] args) { String[] strings = ne ...
- 正则表达式 学习笔记3.4
第一段为合法html代码,第二段为不合法html代码.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...
- 手机号正则表达式验证_想精通正则表达式 这几个正则表达式学习资料及工具你必须有!...
正则表达式不是什么开发语言,也不什么脚本语言,但是你在做项目开发的时候,离不开它.你可以把它理解过一种逻辑公式,正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本.正则对刚入门的程序员,甚至 ...
- 想精通正则表达式 这几个正则表达式学习资料及工具你必须有!
正则表达式不是什么开发语言,也不什么脚本语言,但是你在做项目开发的时候,离不开它.你可以把它理解过一种逻辑公式,正则表达式通常被用来检索.替换那些符合某个模式(规则)的文本.正则对刚入门的程序员,甚至 ...
- 正则表达式学习笔记011--贪婪和懒惰的匹配
正则表达式学习笔记011--贪婪和懒惰的匹配 交流群1:251572072 交流群2:170933152 1.什么是贪婪匹配 从字面上理解:贪心,不满足,有多少要多少 比如正则里也一样:.*,.+,{ ...
- 正则表达式学习笔记010--子表达式的认识与应用
正则表达式学习笔记010--子表达式的认识与应用 交流群1:251572072 交流群2:170933152 子表达式: ()用2个小括号,括起来的叫做子表达式 如: \d{3,4}([\s|-]?\ ...
- 正则表达式学习笔记009--大括号与选择符的认识与应用
正则表达式学习笔记009--大括号与选择符的认识与应用 交流群1:251572072 交流群2:170933152 | 选择符 {n}前面的元素字符出现了n次 {n,}前面的元素字符最少出现n次,n ...
- 正则表达式学习笔记008--字符组简记法2
正则表达式学习笔记008--字符组简记法2 交流群1:251572072 交流群2:170933152 \s [\t\n\r\f] \t制表符 \n换行符 \r回车符 ...
最新文章
- 几种经典的居中技巧(垂直和水平居中)
- SH 脚本注意事项之 IF 判断
- 破解无线路由免费上网
- quartz数据库方式与web工程整合
- ECV2020开赛!识别火焰/头盔/后厨老鼠/摔倒,30万奖金,4万张数据集,等你来战!...
- boost::histogram::detail::tuple_slice用法的测试程序
- C#关键字(79个)
- lisp eval apply_SICP远古魔法-LISP概览(1-2)
- 学Python半年,56岁的潘叔叔晒出99分成绩单,你呢?
- java 发送cookie_java – 如何在response.sendRedirect()之后发送cookie?
- mac vulkan_在 macOS 上开发 Vulkan 程序
- 计算机复试面试基础知识(八股文)(数据库、数据结构、操作系统、计网、机组等)
- 技术美术个人笔记(三)——各贴图格式
- 怎么修改PDF文件的内容?教你两招快来看看
- 编程常用小技巧(持续更新~)
- 学习asp.netcore入门视频
- 内网环境下,RSS新玩法——老树能否发新芽
- 实现简单的三D立方体自动旋转
- WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
- jsp页面使用webcam,获取照片
热门文章
- Hadoop大数据--Mapreduce程序运行并发度
- VMware虚拟机中调用本机摄像头详解
- 2018android wear手表,谷歌正开发三款智能手表 Wear OS系统逐步脱离Android范畴
- Felgo之初体验--安装与运行
- 温控窗帘系统制作文档
- 数据结构基础概念及算法概念
- 票务系统思维导图_【思维导图】第六章:气体灭火系统
- java输出文件中匹配的字段_Java如何从文件中打印与给定模式匹配的所有字符串?...
- easyui框架前后端交互_easyui前后端分离
- 需求获取安排计划书_创业型公司商业计划书PPT怎么写?才是投资人最想看的,免费领取...