正则表达式之道

合集下载

正则表达式全讲解

正则表达式全讲解

\S
匹配任何非空白字符。等价于 [^?\f\n\r\t\v]。
\t
匹配一个制表符。等价于 \x09 和 \cI。
\v
匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
^
匹配输入字符串的开始位置,如果设置了匹配多行(m),那么也匹配行的开头
$
匹配输入字符串的结束位置。如果设置了匹配多行(m),那么也匹配行的结束
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等 价于{0,}。
+
匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但 不能匹配 "z"。+ 等价于 {1,}。
\d
匹配一个数字字符。等价于 [0-9]。
\D
匹配一个非数字字符。等价于 [^0-9]。
\f
匹配一个换页符。等价于 \x0c 和 \cL。
\n
匹配一个换行符。等价于 \x0a 和 \cJ。
\r
匹配一个回车符。等价于 \x0d 和 \cM。
\s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [? \f\n\r\t\v]。
正则表达式对象的属性
source,返回正则表达式模式的文本的复本。只读。 lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的开始位置。 $1...$9,返回九个在模式匹配期间找到的、最近保存的部分。只读。 input ($_),返回执行规范表述查找的字符串。只读。 lastMatch ($&),返回任何正则表达式搜索过程中的最后匹配的字符。只读。 lastParen ($+),如果有的话,返回任何正则表达式查找过程中最后括的子匹配。 只读。 leftContext ($`),返回被查找的字符串中从字符串开始位置到最后匹配之前的位 置之间的字符。只读。 rightContext ($'),返回被搜索的字符串中从最后一个匹配位置开始到字符串结 尾之间的字符。只读。

超详细正则表达式讲解

超详细正则表达式讲解

超详细正则表达式讲解正则表达式正则表达式基础基础(Regular Expression)正则表达式简介n 为什么需要正则表达式?q ⽂本的复杂处理。

n 正则表达式的优势和⽤途?q ⼀种强⼤⽽灵活的⽂本处理⼯具;q 提供了⼀种紧凑的、动态的⽅式,能够以⼀种完全通⽤的⽅式来解决各种字符串处理(例如:验证、查找、替换等)问题;q ⼤部分语⾔、数据库都⽀持正则表达式。

n 正则表达式定义:q 正如他的名字⼀样是描述了⼀个规则,通过这个规则可以匹配⼀类字符串。

n 正则表达式的⽤处:q 验证给定字符串是否符合指定特征,⽐如验证是否是合法的邮件地址。

q ⽤来查找字符串,从⼀个长的⽂本中查找符合指定特征的字符串。

q ⽤来替换,⽐普通的替换更强⼤⼯具软件RegexBuddy 的使⽤n 为了提⾼开发效率,⼀般都先在⼯具软件中测试正则表达式,通过测试后,才在程序中使⽤。

正则表达式规则n 普通字符q 字母、数字、汉字、下划线、以及没有特殊定义的标点符号,都是“普通字符”。

表达式中的普通字符,在匹配⼀个字符串的时候,匹配与之相同的⼀个字符。

n 简单的转义字符\n代表换⾏符\t制表符\\代表\本⾝\^ ,\$,\.,\(, \) , \{, \} , \? , \+ , \* , \| ,\[, \]匹配这些字符本⾝n 标准字符集合:能够与 ‘多种字符’ 匹配的表达式q (注意区分⼤⼩写,⼤写是相反的意思)\d任意⼀个数字,0~9 中的任意⼀个 \w任意⼀个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意⼀个 \s包括空格、制表符、换⾏符等空⽩字符的其中任意⼀个 .⼩数点可以匹配除了换⾏符(\n )以外的任意⼀个字符n ⾃定义字符集合:[ ]⽅括号匹配⽅式,能够匹配⽅括号中任意⼀个字符[ab5@]匹配 "a" 或 "b" 或 "5" 或 "@"[^abc]匹配 "a","b","c" 之外的任意⼀个字符 [f-k]匹配 "f"~"k" 之间的任意⼀个字母 [^A-F0-3]匹配 "A"~"F","0"~"3" 之外的任意⼀个字符注意事项:1. 正则表达式中的特殊符号,如果被包含于中括号中,则失去特殊意义,但 \ [ ] : ^ - 除外。

2-8 正则表达式考察知识点

2-8 正则表达式考察知识点

2-8 正则表达式考察知识点正则表达式是一种强大的文本匹配工具,常用于处理字符串,特别是在数据清洗、爬虫和文本处理等方面。

在正则表达式中,2-8这个范围内的知识点涉及了正则表达式的基本语法和常用操作符。

本文将逐一介绍这些知识点,帮助读者更好地理解和运用正则表达式。

一、基本语法正则表达式是由字符和操作符组成的模式,用于匹配字符串。

在正则表达式中,常用的字符包括字母、数字和特殊字符等,而操作符用于指定匹配规则。

下面是一些常见的基本语法:1. 字符匹配:使用普通字符可以精确匹配相应的字符。

例如,正则表达式a可以匹配字符串中的字母a。

2. 字符类:用中括号来定义一个字符类,匹配其中的任意一个字符。

例如,正则表达式[abc]可以匹配字符串中的字母a、b或c。

3. 范围类:用连字符来定义一个范围类,匹配指定范围内的任意一个字符。

例如,正则表达式[a-z]可以匹配任意小写字母。

4. 反义类:用^符号在字符类中的第一个位置来表示反义类,匹配不属于该类的任意一个字符。

例如,正则表达式[^abc]可以匹配除了字母a、b或c之外的任意字符。

5. 重复匹配:使用特殊字符来指定匹配的次数。

例如,正则表达式a*可以匹配任意数量的字母a,正则表达式a+可以匹配至少一个字母a,正则表达式a?可以匹配零个或一个字母a,正则表达式a{n}可以匹配恰好n个字母a。

6. 边界匹配:使用特殊字符来指定匹配的位置。

例如,正则表达式^a可以匹配以字母a开头的字符串,正则表达式a$可以匹配以字母a结尾的字符串。

二、常用操作符1. 或操作符:使用|符号表示或操作符,匹配两个或多个表达式中的任意一个。

例如,正则表达式a|b可以匹配字母a或字母b。

2. 括号:使用括号来分组表达式,可以改变匹配的优先级。

例如,正则表达式(ab)+可以匹配一个或多个连续的ab。

3. 转义字符:使用反斜杠\来转义特殊字符,使其失去特殊含义,变为普通字符。

例如,正则表达式\.可以匹配句点字符。

正则表达式编写规则

正则表达式编写规则

正则表达式编写规则正则表达式是一种强大的文本匹配工具,在编程、数据处理等方面都有广泛应用。

为了编写出高效、可靠的正则表达式,我们需要遵循一些规则。

以下是一些常用的正则表达式编写规则:1. 精确匹配字符:使用普通字符直接表示需要匹配的字符。

例如,正则表达式“hello”可以精确匹配字符串“hello”。

2. 匹配字符集合:使用方括号表示需要匹配的字符集合。

例如,正则表达式“[abc]”可以匹配字符“a”、“b”或“c”。

3. 匹配字符范围:使用连字符“-”表示需要匹配的字符范围。

例如,正则表达式“[a-z]”可以匹配所有小写字母。

4. 匹配任意字符:使用点“.”表示可以匹配任意字符。

例如,正则表达式“a.b”可以匹配字符串“acb”、“aeb”、“a b”等。

5. 匹配重复字符:使用重复符号表示需要匹配的字符重复次数。

例如,正则表达式“a{3}”可以匹配三个连续的字符“a”。

6. 匹配零次或多次字符:使用星号“*”表示需要匹配的字符可以出现零次或多次。

例如,正则表达式“a*b”可以匹配字符串“b”、“ab”、“aab”等。

7. 匹配一次或多次字符:使用加号“+”表示需要匹配的字符可以出现一次或多次。

例如,正则表达式“a+b”可以匹配字符串“ab”、“aab”、“aaab”等。

8. 匹配开始或结束位置:使用锚点符号表示需要匹配字符的开始或结束位置。

例如,正则表达式“^a”可以匹配以字符“a”开头的字符串,“b$”可以匹配以字符“b”结尾的字符串。

9. 匹配子表达式:使用圆括号表示需要匹配的子表达式。

例如,正则表达式“(ab)+”可以匹配字符串“ab”、“abab”、“ababab”等。

10. 贪婪匹配与非贪婪匹配:正则表达式默认是贪婪匹配,即会尽可能多地匹配字符。

如果需要非贪婪匹配,可以使用问号“?”表示匹配尽可能少的字符。

例如,正则表达式“a.*b”会匹配最长的以字符“a”开始、字符“b”结束的字符串,而“a.*?b”会匹配最短的以字符“a”开始、字符“b”结束的字符串。

正则表达式 语法规则

正则表达式 语法规则

正则表达式语法规则正则表达式是一种用于匹配、查找和替换文本的强大工具。

它的语法规则如下:1. 字符匹配规则正则表达式中的字符可以直接匹配对应的字符。

例如,正则表达式`abc`可以匹配字符串中的"abc"。

2. 字符类规则通过使用方括号,可以定义一个字符类,匹配字符类中的任意一个字符。

例如,正则表达式`[abc]`可以匹配字符串中的"a"、"b"或"c"。

3. 范围规则在字符类中,可以通过使用连字符来指定一个字符范围。

例如,正则表达式`[a-z]`可以匹配任意小写字母。

4. 反义规则通过在字符类前加上"^"符号,可以匹配除了字符类中的字符以外的任意字符。

例如,正则表达式`[^0-9]`可以匹配任意非数字字符。

5. 重复规则通过使用特殊字符"*"、"+"、"?"和"{}",可以指定匹配字符的重复次数。

例如,正则表达式`a*`可以匹配零个或多个连续的"a"字符。

6. 边界规则通过使用特殊字符"^"和"$",可以指定匹配字符的边界。

例如,正则表达式`^abc$`可以确保整个字符串只包含"abc"。

7. 分组规则通过使用圆括号,可以将多个字符组合成一个子表达式,并对其进行匹配。

例如,正则表达式`(abc)+`可以匹配一个或多个连续的"abc"字符串。

8. 转义规则通过在特殊字符前加上反斜杠"\ ",可以将其转义为普通字符。

例如,正则表达式`\.`可以匹配句号字符。

9. 否定规则通过使用特殊字符"?",可以指定匹配字符是可选的。

例如,正则表达式`colou?r`可以匹配"color"或"colour"。

正则表达式记忆口诀

正则表达式记忆口诀

正则表达式记忆⼝诀正则其实也势利,削尖头来把钱揣;(指开始符号^和结尾符号$)特殊符号认不了,弄个倒杠来引路;(指\. \*等特殊符号)倒杠后⾯跟⼩w,数字字母来表⽰;(\w跟数字字母;\d跟数字)倒杠后⾯跟⼩d,只有数字来表⽰;倒杠后⾯跟⼩a,报警符号嘀⼀声;倒杠后⾯跟⼩b,单词分界或退格;倒杠后⾯跟⼩t,制表符号很明了;倒杠后⾯跟⼩r,回车符号知道了;倒杠后⾯跟⼩s,空格符号很重要;⼩写跟罢跟⼤写,多得实在不得了;倒杠后⾯跟⼤W,字母数字靠边站;倒杠后⾯跟⼤S,空⽩也就靠边站;倒杠后⾯跟⼤D,数字从此靠边站;倒框后⾯跟⼤B,不含开头和结尾;单个字符要重复,三个符号来帮忙;(* + ?)0 星加1 到⽆穷,问号只管0 和1;(*表0-n;+表1-n;?表0-1次重复)花括号⾥学问多,重复操作能⼒强;({n} {n,} {n,m})若要重复字符串,园括把它括起来;((abc){3} 表⽰字符串“abc”重复3次)特殊集合⾃定义,中括号来帮你忙;转义符号⾏不通,⼀个⼀个来排队;实在多得排不下,横杠请来帮个忙;([1-5])尖头放进中括号,反义定义威⼒⼤;([^a]指除“a”外的任意字符)1竖作⽤可不⼩,两边正则互替换;(键盘上与“\”是同⼀个键)1竖能⽤很多次,复杂定义很⽅便;园括号,⽤途多;反向引⽤指定组,数字排符对应它;(“\b(\w+)\b\s+\1\b”中的数字“1”引⽤前⾯的“(\w+)”)⽀持组名⾃定义,问号加上尖括号;(“(?<Word>\w+)”中把“\w+”定义为组,组名为“Word”)园括号,⽤途多,位置指定全靠它;问号等号字符串,定位字符串前⾯;(“\b\w+(?=ing\b)”定位“ing”前⾯的字符串)若要定位串后⾯,中间插个⼩于号;(“(?<=\bsub)\w+\b”定位“sub”后⾯的字符串)问号加个惊叹号,后⾯跟串字符串;PHPer都知道,!是取反的意思;后⾯不跟这⼀串,统统符合来报到;(“\w*d(?!og)\w*”,“dog”不符合,“do”符合)问号⼩于惊叹号,后⾯跟串字符串;前⾯不放这⼀串,统统符合来报到;点号星号很贪婪,加个问号不贪婪;加号问号有保底,⾄少重复⼀次多;两个问号⽼规矩,0次1次团团转;花括号后跟个?,贪婪变成不贪婪;还有很多装不下,等着以后来增加。

正则表达式-语法大全

正则表达式-语法大全

正则表达式-语法⼤全1. 正则表达式规则1.1 普通字符字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。

表达式中的普通字符,在匹配⼀个字符串的时候,匹配与之相同的⼀个字符。

,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。

(注:下标从0开始还是从1开始,因当前编程语⾔的不同⽽可能不同),匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。

1.2 简单的转义字符⼀些不便书写的字符,采⽤在前⾯加 "/" 的⽅法。

这些字符其实我们都已经熟知了。

表达式可匹配/r, /n代表回车和换⾏符/t制表符//代表 "/" 本⾝还有其他⼀些在后边章节中有特殊⽤处的标点符号,在前⾯加 "/" 后,就代表该符号本⾝。

⽐如:^, $ 都有特殊意义,如果要想匹配字符串中 "^" 和 "$" 字符,则表达式就需要写成 "/^" 和 "/$"。

表达式可匹配/^匹配 ^ 符号本⾝/$匹配 $ 符号本⾝/.匹配⼩数点(.)本⾝这些转义字符的匹配⽅法与 "普通字符" 是类似的。

也是匹配与之相同的⼀个字符。

,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。

1.3 能够与 '多种字符' 匹配的表达式正则表达式中的⼀些表⽰⽅法,可以匹配 '多种字符' 其中的任意⼀个字符。

⽐如,表达式 "/d" 可以匹配任意⼀个数字。

虽然可以匹配其中任意字符,但是只能是⼀个,不是多个。

这就好⽐玩扑克牌时候,⼤⼩王可以代替任意⼀张牌,但是只能代替⼀张牌。

正则表达式专题

正则表达式专题

★★★正则表达式专题★★★下面我会陆续给出正则表达式使用过程中涉及到的方方面面,已完成。

1、何谓正则表达式正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征,即一段字符串的模式。

比如,表达式“ab+” 描述的特征是“一个 'a' 和任意个 'b'”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。

正则表达式的功能非常强大,打个比方,比如在关系数据库中,SQL语言的地位是显赫的,功能是强大的,那么在字符串处理这个领域,正则表达式可以和SQL语言在关系数据库中扮演的角色相媲美。

从我本人从事多年的软件开发实践中可以感觉到,正则表达式是值得每一个从事计算机相关工作的人去学习、掌握,我们可以从中受惠。

正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。

(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。

(3)用来替换,比普通的替换更强大。

(4)split字符串。

正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。

之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。

平时的开发,常常在Java和.NET平台下进行,这两个平台都提供了相应的正则表达式引擎,用起来感觉也很好。

在VBA的开发中,尽管Excel中提供了很多的内置函数,帮助我们解决一些字符串处理相关的问题,但对有些情况,用内置的函数或者编程来解决,常常会感觉到力不从心或者非常繁琐,而用正则表达式来解决,却变得非常简单。

正则表达式之道

正则表达式之道

正则表达式之道正则表达式之道原著:Steve Mansour*****************Revised: June 5, 1999(copied by jm /at/ from /%7esman/regexp.htm, after the original disappeared! )翻译:Neo Lee*****************2004年10月16日英文版原文译者按:原文因为年代久远,文中很多链接早已过期(主要是关于vi、sed等工具的介绍和手册),本译文中已将此类链接删除,如需检查这些链接可以查看上面链接的原文。

除此之外基本照原文直译,括号中有“译者按”的部分是译者补充的说明。

如有内容方面的问题请直接和Steve Mansor联系,当然,如果你只写中文,也可以和我联系。

目录什么是正则表达式范例简单中级(神奇的咒语)困难(不可思议的象形文字)不同工具中的正则表达式一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。

很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。

正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。

我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。

你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。

正则表达式 原理

正则表达式 原理

正则表达式原理
正则表达式,也称作正规表示法,是用于匹配和处理文本的一种强大工具。

它可以用来快速搜索、替换和提取文本中符合特定模式的字符串。

正则表达式由普通字符和特殊字符组成。

普通字符代表其本身,在正则表达式中匹配对应的字符。

特殊字符具有一些特殊的含义,用于描述要匹配的字符类别和规则。

常见的一些正则表达式特殊字符有:
- `.` : 匹配除换行符以外的任意字符。

- `*` : 匹配前一个字符的零个或多个实例。

- `+` : 匹配前一个字符的一个或多个实例。

- `?` : 匹配前一个字符的零个或一个实例。

- `[]` : 定义一个字符类,匹配其中任意一个字符。

- `()` : 标记一个子表达式,可以对子表达式进行分组、捕获和
引用。

正则表达式还支持一些特殊的元字符组合,用于匹配更复杂的模式。

例如:
- `\w` : 匹配任意单词字符(字母、数字、下划线)。

- `\d` : 匹配任意数字字符。

- `\s` : 匹配任意空白字符(空格、制表符、换行符等)。

- `\b` : 匹配单词的边界。

正则表达式的匹配过程是从左到右逐字符进行的。

当匹配到一个字符时,会根据当前的字符和正则表达式的规则进行匹配。

如果匹配成功,则继续匹配下一个字符,直到完成整个匹配或无法继续匹配。

在实际应用中,正则表达式经常用于文本搜索和处理,如在文本编辑器中查找替换特定的字符串、验证输入数据的格式等。

通过合理运用正则表达式的特殊字符和元字符,可以实现强大的文本处理功能。

c语言正则表达式规则

c语言正则表达式规则

c语言正则表达式规则摘要:一、正则表达式的基本概念1.正则表达式的定义2.正则表达式的作用二、C语言中的正则表达式1.C语言正则表达式的基本语法2.C语言正则表达式的常见函数三、正则表达式的应用场景1.字符串匹配2.数据验证四、正则表达式的高级特性1.贪婪与懒惰匹配2.零宽断言3.反向引用五、正则表达式的使用注意事项1.字符集与量词2.特殊字符与元字符正文:一、正则表达式的基本概念正则表达式(Regular Expression),又称正规表达式、规则表达式,是一种用于描述字符或字符序列的抽象表达式。

它通过一定的语法规则来表示字符串的匹配模式,常用于文本搜索与匹配、数据验证等领域。

1.正则表达式的定义正则表达式是一种用来描述字符或字符序列的抽象表达式,通常由一系列字符、元字符和量词组成。

它用于表示一个字符串的模式,可以用来检查一个字符串是否符合某种规则,或者将符合规则的字符串提取出来。

2.正则表达式的作用正则表达式的主要作用是用于匹配和查找字符串。

它可以帮助程序员快速地检查字符串是否符合某种特定的模式,或者从大量的文本数据中提取出符合特定规则的字符串。

正则表达式在许多编程语言中都有应用,如C语言、Java、Python等。

二、C语言中的正则表达式C语言中,正则表达式的实现主要依赖于库函数。

常用的库函数包括`strlen()`、`strcmp()`、`strstr()`等。

此外,还有一些第三方库,如PCRE (Perl Compatible Regular Expressions),提供了更强大的正则表达式支持。

1.C语言正则表达式的基本语法在C语言中,正则表达式的基本语法包括字符集、元字符、量词等。

通过这些语法元素,可以组合成各种复杂的正则表达式模式。

2.C语言正则表达式的常见函数C语言中,常用的正则表达式函数包括`regexec()`、`regerror()`等。

这些函数可以帮助程序员实现正则表达式的编译、匹配等功能。

正则表达式7个境界

正则表达式7个境界

正则表达式7个境界
正则表达式的七个境界是:
1、基础字符串匹配:这是正则表达式的最基本应用,用于查找与给定模式匹配的字符串。

2、字符类:通过使用字符类,可以匹配一系列特定字符中的一个。

例如,[abc]将匹配a、b或c中的任意一个字符。

3、限定符:使用限定符可以指定匹配的次数或范围。

例如,*表示前面的字符或子模式可以出现零次或多次,+表示前面的字符或子模式至少出现一次。

4、选择、分组和引用:通过使用这些操作符,可以在正则表达式中创建更复杂的模式。

选择操作符允许您选择多个模式中的一个,分组操作符可以将多个模式组合成一个组,引用操作符可以引用前面的模式。

5、非捕获组:在正则表达式中,有些组是捕获组,它们会捕获匹配的文本。

而非捕获组不会捕获匹配的文本,但它们仍然可以用于组织正则表达式或创建更复杂的模式。

6、反向引用:反向引用允许您匹配先前在正则表达式中定义的模式。

例如,如果您有一个模式用于匹配日期,您可以使用反向引用在同一个正则表达式中匹配日期的年、月和日。

7、零宽断言和后行断言:零宽断言和后行断言是更高级的正则表达式概念,它们允许您指定模式之间的相对位置,而不是实际匹配的文本。

例如,使用零宽断言可以指定一个模式必须出现在另一个模式之前或之后,但它们之间不能有任何其他字符。

这七个境界涵盖了正则表达式的核心概念和应用,从简单的字符串匹配到复杂的文本处理和分析。

通过学习和掌握这些概念,您可以更有效地使用正则表达式来处理文本和数据。

正则表达式定义及使用方法

正则表达式定义及使用方法

正则表达式定义及使用方法宝子!今天咱来唠唠正则表达式。

正则表达式呢,就像是一种魔法咒语,专门用来处理文本的。

它是一种用来描述、匹配一系列符合某个句法规则的字符串的单个字符串。

简单说,就是你给它定个规则,它就能按照这个规则在一大串文字里找到你想要的内容。

比如说,你有一篇超级长的文章,里面有好多电话号码,你想把这些电话号码都找出来。

这时候正则表达式就大显身手啦。

你可以写个规则,像“以1开头,后面跟着10个数字”这样的规则,它就能在文章里把符合这个规则的电话号码都给你揪出来。

那正则表达式咋用呢?不同的编程语言里都能用到它,不过语法可能会有点小区别。

咱就拿Python来说哈。

在Python里,有个re模块就是专门用来处理正则表达式的。

要是你想匹配一个简单的单词,像“cat”。

你就可以这样写正则表达式:“cat”。

然后用re模块的相关函数,比如说re.search(),这个函数就会在你给的字符串里去找有没有“cat”这个单词。

如果有,它就会告诉你这个单词在字符串里的位置之类的信息。

要是你想更灵活一点,比如说匹配以“a”开头的单词。

那正则表达式可以写成“a\w*”。

这里的“\w”就代表字母或者数字,“*”表示前面的字符可以出现零次或者多次。

不过呢,正则表达式刚接触的时候可能会觉得有点头疼,那些符号就像神秘的小密码一样。

但是一旦你掌握了一些基本的规则,就会发现它超级好用。

就像你学会了一个超级厉害的小魔法,在处理文本的时候就可以随心所欲啦。

而且啊,正则表达式在很多场景都有用武之地。

像验证用户输入的邮箱格式对不对呀,从网页源代码里提取特定的信息呀。

总之呢,它是文本处理世界里的一个超棒的小工具,只要你有耐心去了解它,它就会成为你的得力小助手哦。

正则表达式知识详解

正则表达式知识详解

正则表达式知识详解⼀、什么是正则表达式?1.定义:正则表达式(regular expression)描述了⼀种字符串匹配的模式,可以⽤来检查⼀个串是否含有某种⼦串、将匹配的⼦串做替换或者从某个串中取出符合某个条件的⼦串等。

构造正则表达式的⽅法和创建数学表达式的⽅法⼀样。

也就是⽤多种元字符与运算符可以将⼩的表达式结合在⼀起来创建更⼤的表达式。

正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

2.组成:正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的⽂字模式。

模式描述在搜索⽂本时要匹配的⼀个或多个字符串。

正则表达式作为⼀个模板,将某个字符模式与所搜索的字符串进⾏匹配。

3.何时使⽤:验证——从头到尾完整匹配!查找——只要部分匹配即可!⼆、正则表达式的基本语法和规则1.备选字符集:规定某*⼀位字符*可⽤的备选字符的集合语法:[可选字符列表]强调:1. ⽆论备选字符集包含多少字符,只能选1个2. 必须选1个!⽐如:6位数字的密码[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]简化:1. 当备选字符连续时,可⽤-表⽰范围的区间⽐如:[0123456789]-->[0-9][0-9][0-9][0-9][0-9][0-9][0-9][a-z]-->1位⼩写字母[A-Z]-->1位⼤写字母[A-Za-z]-->1位字母,⼤⼩写都⾏[0-9a-zA-Z]-->1位字母或数字都⾏反选:[^不能选的字符列表]⽐如:[^47] 强调:^作“除了”使⽤时,只能放在开头2. 预定义字符集:为常⽤的字符集专门提供的简化写法!“\d”-->[0-9]-->1位数字“\w”-->[0-9a-zA-Z_]-->1位字母,数字或_“\s”-->1位空字符:匹配任何空⽩字符,包括空格、制表符、换页符等等。

正则表达式之道

正则表达式之道

正则表达式之道什么是正则表达式?正则表达式就是一种描述字符串的通用模式表示法,它赋予了使用者分析和处理文本的能力。

从较低的层面来说,正则表达式被用来在一个字符串中匹配用户期望的文本,用户可以检查自己所期望获得的文本是否获得了匹配,如果获得了匹配,用户还可以对这段文本进行删除、替换等操作;如果没有成功匹配,正则引擎会报告匹配失败,用户可以根据结果做其它操作。

从较高的层面来看,正则表达式试图以一种简洁、高效、通用的方式来让你掌握自己的数据。

简洁、高效、通用,这是我认为正则表达式所蕴含的三个重要思想。

正则表达式由元字符和普通字符组成。

元字符就是对正则引擎来说有特殊含义的字符,如果多个字符合在一起才有特殊作用,那么这多个字符合称元字符序列。

例如 ^ 在正则表达式中通常表示从字符串的开头开始匹配,\n 代表匹配目标字符串中的一个换行符。

普通字符就是没有特殊含义的字符,如果要让一个元字符成为普通字符,则需在这个元字符前加 \ ,例如 \^ 代表匹配一个普通的字符 ^ ,此时的 ^ 被转义,不再有特殊含义。

为了追求简洁性,正则表达式不得不在可读性方面作出一些牺牲。

对许多人来讲,正则表达式在他们眼中就是一堆奇形怪状的符号的集合。

的确如此,为了实现很多特殊功能,开发人员只好利用有限的字符,通过一些组合来得到各式各样的元字符序列,这些组合而来的字符,对于初学者来说不是很容易记忆,但对于学习正则表达式而言,记住这些字符和它们的含义并不算难事。

正则表达式没有唯一性,也没有统一性。

不同的语言、不同的工具对于实现正则表达式的方式都可能不同。

正则表达式的有些特性在不同的语言和工具中,受支持的程度都不同,甚至有些语言和工具不支持一些很有用的特性,这些情况都是很常见的。

正则表达式的发展是崎岖不平的,并没有什么标准作为指导。

不同的人都希望按自己的意愿来实现自己想要的功能,所以结果就变得很复杂。

初学正则表达式不应在这上面多花时间,对于不同语言、工具的差异仅仅了解一下即可,最重要的是正则表达式的常见特性和正则表达式的匹配原理,这两者在不同语言和工具中的表现是基本一致的。

通俗易懂的正则表达式语法详解

通俗易懂的正则表达式语法详解

深入浅出之正则表达式(二)前言:本文是前一片文章《深入浅出之正则表达式(一)》的续篇,在本文中讲述了正则表达式中的组与向后引用,先前向后查看,条件测试,单词边界,选择符等表达式及例子,并分析了正则引擎在执行匹配时的内部机理。

本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载。

但是为了尊重原作者和译者的劳动,请注明出处!谢谢!9.单词边界$ 匹配输入字符串的结束位置。

如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

* 匹配前面的子表达式零次或多次。

例如,zo*能匹配“z”以及“zoo”。

*等价于{0,}。

+ 匹配前面的子表达式一次或多次。

例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。

+等价于{1,}。

匹配前面的子表达式零次或一次。

例如,“do(es)?”可以匹配“does”或“does”中的“do”。

?等价于{0,1}。

{n} n是一个非负整数。

匹配确定的n次。

例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

{n,} n是一个非负整数。

至少匹配n次。

例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。

“o{1,}”等价于“o+”。

“o{0,}”则等价于“o*”。

{n,m} m和n均为非负整数,其中n<=m。

最少匹配n次且最多匹配m次。

例如,“o{1,3}”将匹配“fooooood”中的前三个o。

“o{0,1}”等价于“o?”。

请注意在逗号和两个数之间不能有空格。

当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。

非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

正则表达式知识总结

正则表达式知识总结

正则表达式知识总结正则表达式知识总结一简单举例认识正则表达式1名词解释:正则表达式就是用于描述这些规则的工具,即记录文本规则的代码注意事项:处理正则表达式的工具会提供一个忽略大小写的选项eg:\bhi\b解释:\b是正则表达式规定的一个特殊代码,为元字符(metacharacter),代表单词的开头或结尾,为分界处,是一个位置的分界点eg:查找hi后不远处一个lucy,写法为:\bhi\b.*\blucy\beg:"."为元字符,匹配不换行的任意字符。

"*"为元字符,代表不是字符,也不是位置,而是数量---是指*前面的内容可以连续重复的使用任意次数已使整个表达式得到匹配。

*连在一起,意味着任意数量的不包含换行的字符,eg:0\d\d-\d\d\d\d\d\d\d\d解释:以0开头,然后是两个数字,中间位一个连字符"-",最后为8个数字简写为:0\d{2}-\d{8}表示连续重复多少次;\s 匹配任意的空白符包括空格,制表符(tab)换行符中文全角空格\w匹配字母或数字或下划线或汉字等eg:\ba\w*\b解释:已字母(\b)a开头的单词。

然后是(\w*)任意的字母,数字,下划线,最后为单词的结束处eg:\d+解释:匹配一个或更多连续的数字。

这里的+与*是类似的元字符,不同点:+匹配一个或更多连续的数字;*匹配任意的次数。

eg:\b\w{6}\b解释:匹配6个字符的单词^匹配字符串的开始$匹配字符串的结束,这两个元字符在验证输入的内容时非常有用eg:要求输入5到12个数字:^{5,12}$注意事项:政策表达式的处理工具还有个处理多行的选项二字符转义,特指"\"如果要查元字符本身,就必须使用转义符例如:\\,\*,\$等eg:c:\\windows解释:匹配的是c:\windowseg:deerchao\.net解释:匹配的是/doc/995920093.html,三重复匹配重复方式有:* + {5} {2,12}{1,}二测试正则表达式(.Net Framework4.0)/doc/995920093.html,/tools/zhengze. html/^-?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/^匹配字符串开头匹配减号,问号表示减号是可选的,可以没有\d+匹配任意位的数字| 表示‘或’关系\d{1,3} 匹配1-3位数字:,\d{3})+ 匹配一个逗号加一个3位数字,+号表示可以重复多个:\.\d+)?匹配一个小数点和多位数字$匹配结尾综合起来,这个正则表达式用于匹配数字可以是整数,也可以是小数12345和12345.6789都可以可以是负数也可以是正数-12345和-12345.6789也行整数部分还可以有逗号做分割符12,345,678,901.123456也可以匹配当然-12,345,678,901.123456也可以等价:等价是等同于的意思,表示同样的功能,用不同符号来书写。

正则表达式教程

正则表达式教程

正则表达式教程正则表达式(Regular Expression),又称规则表达式,是一种用来描述字符序列的强大工具。

它主要用于字符串的模式匹配、查找替换以及验证输入等各种操作。

正则表达式由一些字符和特殊字符组成,通过组合这些字符来指定一个匹配模式。

在正则表达式中,使用一些特殊字符来表示不同的意义,比如:1. 元字符(Metacharacters):用于描述模式的特殊字符,如"."表示匹配除换行符之外的任意字符,"[]"表示匹配括号内的任意一个字符等。

2. 量词(Quantifiers):用于描述匹配次数的特殊字符,如"*"表示匹配前一个字符0次或多次,"+"表示匹配前一个字符1次或多次,"?"表示匹配前一个字符0次或1次等。

3. 转义字符(Escape Characters):用于将特殊字符转义为普通字符,如"\."表示匹配真正的点字符,而不是元字符"."表示的任意字符。

正则表达式可以通过各种编程语言来实现,常见的有Python、JavaScript、Java、Perl等。

不同的编程语言对正则表达式的支持程度不同,但基本的语法规则是相通的。

使用正则表达式,可以实现很多常见的操作,比如:1. 匹配字符串:通过正则表达式来判断一个字符串是否与某个模式匹配。

2. 查找替换:可以在一个字符串中查找匹配某个模式的部分,并进行替换。

3. 分割字符串:可以根据某个模式将一个字符串分割成多个部分。

4. 验证输入:可以用正则表达式对用户输入的数据进行验证,比如邮箱、手机号等。

5. 提取信息:可以提取一个字符串中符合某个条件的部分,比如提取出所有URL链接。

正则表达式是一个非常强大和灵活的工具,但也经常被人们认为难以理解和编写。

因此,掌握正则表达式的基本语法和常用操作是很有必要的。

编程语言中的正则表达式应用技巧总结

编程语言中的正则表达式应用技巧总结

编程语言中的正则表达式应用技巧总结正则表达式是一种用于匹配文本模式的语言,它被广泛应用在各种编程语言中。

正则表达式作为一种强大的匹配工具,它能够帮助我们在文本中搜索和替换指定模式的字符串。

本文将总结编程语言中正则表达式的应用技巧。

一、正则表达式的基本概念正则表达式是一种标准的字符串匹配格式,它是由字符和特殊字符组成的文本字符串。

正则表达式中的特殊字符,如 $ ^ * + ? { } | [ ] ( ) \ 用于指定匹配规则和限制条件。

正则表达式中的字符集用于描述字符匹配范围,如 [a-zA-Z0-9] 表示匹配所有的大小写字母和数字。

二、正则表达式的常用语法1. 横向匹配与纵向匹配横向匹配指由左到右按字符匹配,如正则表达式 /ba*/ 匹配 baa,baaa 等字符串。

纵向匹配指由上到下按字符匹配,如正则表达式/b[abc]t/ 匹配 bat,bbt,bct 等字符串。

2. 字符集合字符集用于描述匹配的字符范围。

方括号内的字符表示可选的字符匹配项。

例如,正则表达式 /[abc]/ 匹配 a,b,c 中的任意一个字符。

3. 量词量词用于描述匹配的字符出现次数。

常见量词include ?、+、*、{}。

量词可以与一组字符或一个字符集合结合使用,如正则表达式 /ba{2,5}t/ 匹配 baaat、baaat 等字符串。

4. 分组分组用于对正则表达式中的一组字符进行匹配。

例如,正则表达式 /(\d{3})-(\d{3}-\d{4})/ 匹配电话号码,其中 () 内的内容表示分组。

三、正则表达式在编程中的应用技巧1. 搜索和替换正则表达式可以帮助我们在文本中搜索指定的模式,并进行替换。

例如,使用正则表达式 /this/ 替换文本中的 this 字符串,可以简单实现向文本中添加相应的样式。

2. 表单验证正则表达式可以用于表单验证。

例如,可以使用正则表达式验证用户名、密码、邮箱等输入是否符合要求。

在表单验证过程中,正则表达式通常被用于校验输入数据的格式是否正确。

正则表达式语法规则

正则表达式语法规则

正则表达式(Regular Expression)是一种用于匹配文本的模式,它提供了一种灵活、强大且通用的文本处理方式。

下面是正则表达式的语法规则:字面量字符:除了特殊的元字符,所有的字符都是字面量,表示它本身。

元字符:正则表达式中具有特殊意义的字符,需要用反斜杠(\)来转义。

字符类:用方括号([])表示,匹配方括号中任意一个字符。

范围类:在字符类中使用连字符(-)表示范围,例如[a-z]表示小写字母a到z中任意一个字符。

排除类:在字符类中使用脱字符(^)表示排除,例如[^a-z]表示除了小写字母a到z之外的任意一个字符。

重复次数:用花括号({})表示,例如a{2,5}表示匹配两到五个连续的a。

通配符:用句点(.)表示,可以匹配任意一个字符。

贪婪与非贪婪匹配:默认情况下,正则表达式会尽可能地匹配更长的字符串,这种匹配方式称为贪婪匹配。

在重复次数后加上问号(?)可以将其改为非贪婪匹配。

锚点:用于定位字符串的位置,包括行首(^)、行尾($)、单词边界(\b)和非单词边界(\B)。

分组:用小括号(())将一组字符括起来,可以对其进行重复、替换、捕获等操作。

向后引用:使用反斜杠和数字(\1、\2等)表示对前面已经匹配的分组的引用。

零宽度断言:不消耗字符的匹配方式,包括正向先行断言((?=...))、负向先行断言((?!...))、正向后行断言((?<=...))和负向后行断言((?<!...))。

模式修饰符:用于修改正则表达式的匹配方式,包括大小写匹配(i)、全局匹配(g)、多行匹配(m)等。

以上就是正则表达式的语法规则,掌握这些规则可以更好地理解和使用正则表达式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

正则表达式之道原著:Steve Mansoursman@Revised: June 5, 1999(copied by jm /at/ from /%7esman/regexp.htm, after the original disappeared! )目录什么是正则表达式范例简单中级(神奇的咒语)困难(不可思议的象形文字)不同工具中的正则表达式什么是正则表达式一个正则表达式,就是用某种模式去匹配一类字符串的一个公式。

很多人因为它们看上去比较古怪而且复杂所以不敢去使用——很不幸,这篇文章也不能够改变这一点,不过,经过一点点练习之后我就开始觉得这些复杂的表达式其实写起来还是相当简单的,而且,一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作压缩在几分钟(甚至几秒钟)内完成。

正则表达式被各种文本编辑软件、类库(例如Rogue Wave的tools.h++)、脚本工具(像awk/grep/sed)广泛的支持,而且像Microsoft的Visual C++这种交互式IDE也开始支持它了。

我们将在如下的章节中利用一些例子来解释正则表达式的用法,绝大部分的例子是基于vi中的文本替换命令和grep文件搜索命令来书写的,不过它们都是比较典型的例子,其中的概念可以在sed、awk、perl和其他支持正则表达式的编程语言中使用。

你可以看看不同工具中的正则表达式这一节,其中有一些在别的工具中使用正则表达式的例子。

还有一个关于vi中文本替换命令(s)的简单说明附在文后供参考。

正则表达式基础正则表达式由一些普通字符和一些元字符(metacharacters)组成。

普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。

例如,正则表达式"testing"中没有包含任何元字符,,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"。

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。

下表列出了所有的元字符和对它们的一个简短的描述。

元字符描述.匹配任何单个字符。

例如正则表达式r.t匹配这些字符串:rat、rut、r t,但是不匹配root。

$匹配行结束符。

例如正则表达式weasel$能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。

^匹配一行的开始。

例如正则表达式^When in能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。

*匹配0或多个正好在它之前的那个字符。

例如正则表达式.*意味着能够匹配任意数量的任何字符。

\这是引用府,用来将这里列出的这些元字符当作普通的字符来进行匹配。

例如正则表达式\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\.用来匹配点字符,而不是任何字符的通配符。

[ ] [c1-c2] [^c1-c2]匹配括号中的任何一个字符。

例如正则表达式r[aou]t匹配rat、rot和rut,但是不匹配ret。

可以在括号中使用连字符-来指定字符的区间,例如正则表达式[0-9]可以匹配任何数字字符;还可以制定多个区间,例如正则表达式[A-Za-z]可以匹配任何大小写字母。

另一个重要的用法是“排除”,要想匹配除了指定区间之外的字符——也就是所谓的补集——在左边的括号和第一个字符之间使用^字符,例如正则表达式[^269A-Z]将匹配除了2、6、9和所有大写字母之外的任何字符。

\< \>匹配词(word)的开始(\<)和结束(\>)。

例如正则表达式\<the能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。

注意:这个元字符不是所有的软件都支持的。

\( \)将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用\1到\9的符号来引用。

|将两个匹配条件进行逻辑“或”(Or)运算。

例如正则表达式(him|her)匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。

注意:这个元字符不是所有的软件都支持的。

+匹配1或多个正好在它之前的那个字符。

例如正则表达式9+匹配9、99、999等。

注意:这个元字符不是所有的软件都支持的。

?匹配0或1个正好在它之前的那个字符。

注意:这个元字符不是所有的软件都支持的。

\{i\} \{i,j\}匹配指定数目的字符,这些字符是在它之前的表达式定义的。

例如正则表达式A[0-9]\{3\}能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。

而正则表达式[0-9]\{4,6\}匹配连续的任意4个、5个或者6个数字字符。

注意:这个元字符不是所有的软件都支持的。

最简单的元字符是点,它能够匹配任何单个字符(注意不包括新行符)。

假定有个文件test.txt包含以下几行内容:he is a rathe is in a rutthe food is RottenI like root beer我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。

命令grep r.t test.txt在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。

正则表达式r.t匹配一个r接着任何一个字符再接着一个t。

所以它将匹配文件中的rat和rut,而不能匹配Rotten中的Rot,因为正则表达式是大小写敏感的。

要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。

正则表达式[Rr]能够同时匹配R和r。

所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。

要想匹配行首的字符要使用抑扬字符(^)——又是也被叫做插入符。

例如,想找到text.txt中行首"he"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的h。

有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出现在方括号中是,它表示“排除”,例如要匹配he,但是排除前面是t or s的情性(也就是the和she),可以使用:[^st]he。

可以使用方括号来指定多个字符区间。

例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]*匹配一个字母后面接着0或者多个字母(大写或者小写)。

当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+,和[A-Za-z][A-Za-z]*完全等价。

但是要注意元字符+并不是所有支持正则表达式的程序都支持的。

关于这一点可以参考后面的正则表达式语法支持情况。

要指定特定数量的匹配,要使用大括号(注意必须使用反斜杠来转义)。

想匹配所有100和1000的实例而排除10和10000,可以使用:10\{2,3\},这个正则表达式匹配数字1后面跟着2或者3个0的模式。

在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\{3,\}将匹配至少3个连续的0。

简单的例子这里有一些有代表性的、比较简单的例子。

vi 命令作用:%s/ */ /g把一个或者多个空格替换为一个空格。

:%s/ *$//去掉行尾的所有空格。

:%s/^/ /在每一行头上加入一个空格。

:%s/^[0-9][0-9]* //去掉行首的所有数字字符。

:%s/b[aeio]g/bug/g将所有的bag、beg、big和bog改为bug。

:%s/t\([aou]\)g/h\1t/g 将所有tag、tog和tug分别改为hat、hot和hug(注意用group的用法和使用\1引用前面被匹配的字符)。

中级的例子(神奇的咒语)例1将所有方法foo(a,b,c)的实例改为foo(b,a,c)。

这里a、b和c可以是任何提供给方法foo()的参数。

也就是说我们要实现这样的转换:之前之后foo(10,7,2)foo(7,10,2)foo(x+13,y-2,10)foo(y-2,x+13,10)foo( bar(8), x+y+z, 5)foo( x+y+z, bar(8), 5)下面这条替换命令能够实现这一魔法::%s/foo(\([^,]*\),\([^,]*\),\([^)]*\))/foo(\2,\1,\3)/g现在让我们把它打散来加以分析。

写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。

第一个参数是用这个表达式来识别的::\([^,]*\),我们可以从里向外来分析它:[^,]除了逗号之外的任何字符[^,]*0或者多个非逗号字符\([^,]*\)将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它\([^,]*\),我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。

现在正是指出一个使用正则表达式常见错误的最佳时机。

为什么我们要使用[^,]*这样的一个表达式,而不是更加简单直接的写法,例如:.*,来匹配第一个参数呢?设想我们使用模式.*来匹配字符串"10,7,2",它应该匹配"10,"还是"10,7,"?为了解决这个两义性(ambiguity),正则表达式规定一律按照最长的串来,在上面的例子中就是"10,7,",显然这样就找出了两个参数而不是我们期望的一个。

所以,我们要使用[^,]*来强制取出第一个逗号之前的部分。

这个表达式我们已经分析到了:foo(\([^,]*\),这一段可以简单的翻译为“当你找到foo(就把其后直到第一个逗号之前的部分标记为\1”。

然后我们使用同样的办法标记第二个参数为\2。

对第三个参数的标记方法也是一样,只是我们要搜索所有的字符直到右括号。

相关文档
最新文档