正则表达式学习之一:基本语法
来源:互联网 发布:中金数据系统怎么样 编辑:程序博客网 时间:2024/05/17 22:46
准备把这篇文章翻译一下,学习一下正则表达式的基本语法。看的头大了,这玩意用的时候还是要边查边写的好。
----------------------------------------
简介
正则表达式是为了描述一个字符串的某个特征,然后用它来匹配另外一个字符串。举个例子,模式“ab+”意味着“一个’a’”和至少一个’b’,所以”ab”,”abb”,“abbbbbbb”都跟这个模式匹配。
正则表达式用于:(1) 判断一个字符串是否跟一个模式匹配,譬如电邮地址; (2)在整个文本中找到符合给定模式的子字符串;(3)对一段文本做复杂的替换操作
正则表达式的语法学习非常简单,一些抽象概念也很容易理解。许多相关文章没有将正则表达式的概念从简单到抽象一步步介绍,所以很多人觉得学习起来很困难。另一方面,每个正则表达式引擎都会描述它独特的功能,而这部分独特功能却不是我们最初应该学习的。
1. 正则表达式基本语法
1.1 一般字符
字母、数字、下划线、无特殊定义的标点就是“一般字符”。当正则表达式与一个字符串匹配时,一个一般字符跟相同的字符匹配。
例子1:当模式”c”与字符串”abcde”测试匹配时,匹配结果:成功,子串匹配”c”
例子2:当模式“bcd”与字符串“abcde”测试匹配时,匹配结果:成功,匹配字串”bcd”
1.2 简单转义字符
我们知道的非打印字符:
表达式
匹配
/r, /n
回车,换行符
/t
Tab
//
“/”
在正则表达式语法中有特殊定义的一些标点符号。为了匹配这些字符,需要在模式中加入”/”。举个例子:^,$有特殊定义,所以我们需要用”/^”和”/$”来匹配它们。
表达式
匹配
/^
“^”
/$
“$”
/.
“.”
转义字符的匹配效果跟一般字符一样,也是匹配它们自身字符。
例如:模式”/$d”匹配字符串”abc$de”
1.3 匹配字符集中任意字符的表达式
一些表达式能匹配字符集中的任意字符。比如”/d”就能匹配任意的数字。每个这样的表达式每次只能匹配一个,虽然它们能匹配一组字符中的任意字符。
表达式
匹配
/d
任意数字,0~9
/w
任意字母,数字,下划线 A~Z, a~z, 0~9, _
/s
空格,tab,换行,回车,换页符中的任意一个
.
除了换行符(/n)之外的任意字符
例如:模式”a.d”匹配”aaa100”,匹配成功,匹配字串”aa1”
1.4 用于匹配许多字符集中的任意一个字符的自定义表达式
使用方括号([])的表达式表达式可以包含一系列的字符,它能匹配任意的一个。使用[^ ]包含一系列的字符,它能匹配除开所包含的字符集外的字符。
表达式
匹配
[ab5@]
“a”或 “b”或 “5”或 “@”
[^abc]
匹配除了”a” “b” “c”其余的字符
[f-k]
“f” 到“k”之间的字符
[^A-F0-3]
不处于“A”~”F”,”0”~”3”的所有字符
例如:模式”[bcd][bcd]”跟字符串”abc123”, 匹配成功,匹配字串”bc”
例如:模式”[^abc]”跟字符串”abc123”,匹配成功,匹配子串”1”;
1.5 用于数量匹配的特殊表达式
前面介绍的所有表达式只能匹配一次字符。如果一个表达式后面跟随一个数字,它就能匹配多次。
例如:我们可以使用模式”[bcd]{2}”来代替”[bcd][bcd]”
表达式
匹配
{n}
匹配n次,例如”/w{2}”等价于”/w/w”;”a{5}”等价于”aaaaa”
{m, n}
至少匹配n次,但不多于m次:”ba{1,3}” 匹配”ba”, “baa”, “baaa”
{m,}
匹配至少m次:”/w/d{2,}”跟”a12”,”_456” “M12344”..
?
匹配1次或者0次,等价于{0, 1}: “a[cd]?”跟”a”, “ac”, “ad”
+
匹配一次或者多次,等价于{1,}:”a+b”跟”ab”, “aab”, “aaab”
*
匹配0次或者多次,等价于{0,}:”/^*b”跟”b”,”^^^b”…
例如:模式”/d+/.?/d*”跟”I tcosts &12.5”匹配,结果成功,匹配子串”12.5”;
例如:模式”go{2,8}gle”跟”Ads bygooooogle”匹配,结果成功;匹配子串”gooooogle”
1.6 巨有抽象功能的特殊标点
一些标点在模式中具有特殊的功能:
表达式
匹配
^
匹配字符串的开头
$
匹配字符串的结尾
/b
匹配边界内的字符??
举例1:模式”^aaa”跟字符串“xxxaaa xxx”,匹配失败。因为”^”必须匹配字符串的开头。
例2:模式”aaa$”跟字符串”xxxaaa xxx”,匹配失败、
例3:模式”./b.”跟字符串”@@@abc”,匹配成功,匹配字串”@a”.
“/b”类似于”^”跟”$”的交集,它不跟任何字符匹配,但是它要求一个”/w”在一边,一个非”/w”字符在另一边
例4:模式”/bend/b”跟字符串”weekend,endfor,end”匹配,结果成功,匹配子串”end”,开始位置15,结束位置18 ??
一些特殊标点能嵌套在其他子模式中起作用:
模式
匹配
|
二选一,左匹配或者右匹配
( )
(1) 当子模式
(2) 子模式匹配结果能单独检索
例: 当模式”Tom|Jack”匹配字符串”I’mTom, he is Jace”,匹配成功,子串”Tom”开始位置4,结束位置7; 当匹配下一个时,匹配成功,子串”Jack”,开始位置15,结束位置19。
例:当模式”(go/s*)+”匹配字符串”Let’sgo go go!”,匹配成功;子串”go go go”:开始位置6,结束位置14。
例:当模式”¥(/d+/.?/d*)”与字符串”$10.9, ¥20.5”匹配,匹配成功;子串” ¥20.5”:位置开始6,结束10。子模式”()”的匹配记过是”20.5”。
下一篇将是一些常规表达式中的高级语法
- 正则表达式学习之一:基本语法
- 正则表达式基本语法学习
- 正则表达式基本语法学习
- 学习:正则表达式的基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- 正则表达式基本语法
- Android 软件的状态栏图标通知处理
- php缓存技术
- c# 用了picturebox-paint重绘事件之后
- Final Project Proposal ——陈稳霖
- 抱月的断想
- 正则表达式学习之一:基本语法
- Zen-cart 数据库封装类解读
- define和typedef + tips
- 教你几招:IIS服务器中如何防止被攻击
- servlet 监听器
- 常用工具
- 主题数据平台
- OCS Inventory 配置
- [Java SE]如何将图片打包到jar中