正则表达式

正则表达式
正则表达式

正则表达式

正则表达式(regular expression)定义了由一个或多个字符串组成的集合。简单字符串也是正则表达式,它定义了由该字符串自身组成的集合。复杂的正则表达式使用字母、数字和特殊字符来定义不同的字符串。正则表达式“匹配”它定义的任何字符串。

本附录描述了ed 、vim 、emacs 、grep 、awk/mawk/gawk 、sed 、Perl 等实用程序使用的正则表达式。关于Perl 正则表达式的更多信息参见11.7节。这些表达式与shell 的模糊文件引用中使用的正则表达式(参见5.4节)不同。

本附录要点:

● 字符 ● 分隔符 ● 简单字符串 ● 特殊字符 ● 规则 ● 括号表达式 ● 替换字符串 ● 扩展的正则表达式

附录A

第Ⅵ部分附录

774

A1 字符

本附录使用的字符是除换行符之外的其他任意字符。正则表达式中的大多数字符代表它们自身,而那些不代表自身的字符称为特殊字符,也称为元字符。如果需要使用特殊字符代表自身,就需要将这些字符转义(参见A4.5节)。

A2 分隔符

分隔符指标志正则表达式开始和结束的字符。正则表达式的分隔符通常是一个特殊字符,即,该字符不代表它自身而是标志表达式的开始和结束。尽管vim允许使用其他分隔符而grep不使用任何分隔符,但是本附录中的正则表达式使用向前的斜杠(/)作为分隔符,在不存在多义性的情况下,不需要第2个分隔符。例如,当第2个分隔符后面要紧跟回车符时,就可以省略第2个分隔符。

A3 简单字符串

最基本的正则表达式是不包含除分隔符外的特殊字符的简单字符串。简单字符串只与自身匹配(如表A-1所示)。在本附录的示例中,匹配的字符串都带有下划线,例如,look like this。

表A-1 简单字符串

正则表达式匹配的字符串示例

/ring/ ring ring、spring、ringing、stringing

/Thursday/ Thursday Thursday、Thursday's

not、poor nothing /or not/ or not or

A4 特殊字符

在正则表达式中使用特殊字符可以使得正则表达式匹配多个字符串。包含特殊字符的正则表达式总是尽可能匹配最长的字符串,即从文本行的开始(左端)尽可能地向前匹配。

A4.1 句点

句点(.)可以与任何字符匹配(如表A-2所示)。

表A-2 句点

正则表达式匹配字符串示例

will talk、may balk

/ .alk/ 与空格和后面的一个任意字符以及alk

匹配的所有字符串

/.ing/ 匹配由ing和前面的任意字符组成的所

sing song、ping、before inglenook

有字符串

附录A 正则表达式775 A4.2 方括号

方括号([ ])用来定义一个字符类1,该类与方括号内的任意单个字符匹配(如表A-3所示)。如果左方括号后面的第1个字符是脱字符(^),则方括号定义的字符类与不在方括号内的任意其他单个字符匹配。使用连字符可以指定字符的范围。在字符类的定义中,下面几节使用的反斜杠和星号都失去了它们的特殊意义。右方括号(作为字符类的一个成员出现)可以紧跟在左方括号后。脱字符只有紧跟在左方括号后才具有特殊意义;美元符号只有后面紧接右方括号时才具有特殊意义。

表A-3 方括号

正则表达式匹配的字符串示例

/[bB]ill/ 与bill和Bill字符串匹配 bill、Bill、billed

talkative、stink、teak、tanker /t[aeiou].k/ 与t和后面的小写元音字母以及任意字符和k组成的字

符串匹配

/# [6-9]/ 与#和后面的空格以及6 ~ 9之间的任意一个数字组成的

# 60、# 8:、get # 9

字符串匹配

/[^a-zA-Z]/ 与26个字母之外的任意字符(仅限于ASCII字符集)匹配1、7、@、.、}、Stop!

A4.3 星号

星号跟随在代表某个字符的正则表达式(如表A-4所示)之后,表示与该正则表达式匹配字符的0个或多个字符串。跟在句点后的星号可以匹配任意字符串(因为句点可以匹配任意字符,而星号可以匹配前面出现的正则表达式的0个或多个字符串)。星号后面的字符类定义可以匹配属于该类定义的成员字符的任意字符串。

表A-4 星号

正则表达式匹配的字符串示例

/ab*c/ 与字母a后跟0个或多个b再跟1个c的字符串匹配 ac、abc、abbc、debbcaabbbc /ab.*c/ 与ab后跟0个或多个字符再跟1个c的字符串匹配 abc、abxc、ab45c、

xab a756.345 x cat /t.*ing/ 与t后跟0个或多个字符再跟ing的字符串匹配 thing、ting、I thought of going /[a-zA-Z]*/ 与仅由字母和空格组成的字符串匹配 1. any string without numbers or

punctuation!

/(.*)/ 与圆括号括起来的最长的字符串匹配Get (this) and (that)

/([^])*)/ 与圆括号括起来的最短的字符串匹配 (this)、Get (this and that)

1. .GNU文档中把这些列表运算符和定义字符类的运算符称为表达式,该表达式与预定义的一组字符匹配,如所有数

字(如表15-37所示)。

第Ⅵ部分附录

776

A4.4 脱字符与美元符号

以脱字符(^)开始的正则表达式只能匹配位于行首的字符串。类似地,以美元符号($)结尾的正则表达式只能匹配行末尾的字符串。脱字符和美元符号称为锚点(anchor),因为它们使得匹配固定在行首或行尾(如表A-5所示)。

表A-5 脱字符与美元符号

正则表达式匹配的字符串示例

/^T/ 与位于行首的T匹配This line...

That Time...

ln Time

/^+[0-9]/ 与位于行首且由加号和后面的一个数字组

成的字符串匹配+5 +45.72、

+759 Keep this...

/:$/ 与位于行尾的冒号匹配 ...below:

A4.5 转义特殊字符

在特殊字符前面使用反斜杠可以转义除数字和圆括号(在Perl中除外)外的特殊字符(如表A-6所示)。转义后的特殊字符代表它自身。

表A-6 转义的特殊字符

正则表达式匹配的字符串示例

/end\./ 与包含end和后面的一个句点的所有字符

串匹配

The end.、send.、pretend.mail /\\/ 与单独的一个反斜杠匹配\

/\*/ 与星号匹配*c、an asterisk(*)

/\[5\]/ [5] it was five [5]

/and\/or/ and/or and/or

A5 规则

下面是应用正则表达式的一些规则。

A5.1 最长匹配

正则表达式总是尽可能匹配最长的字符串,从行首尽可能地向前匹配。Perl把这类匹配称为贪婪匹配。例如,对于下面的字符串:

附录A 正则表达式777

This (rug) is not what it once was (a long time ago), is it?

表达式/Th.*is/与下面的字符串匹配:

This (rug) is not what it once was (a long time ago), is

表达式/(.*)/与下面的字符串匹配:

(rug) is not what it once was (a long time ago)

而表达式/([^)]*)/与下面的字符串匹配:

(rug)

然而,对于下面的字符串:

singing songs, singing more and more

表达式/s.*ing/与下面的字符串匹配:

singing songs, singing

表达式/s.*ing song/与下面的字符串匹配:

singing song

A5.2 空正则表达式

对于某些实用程序(如vim和less,但对grep实用程序不适用),空正则表达式代表最后一次使用的表达式。例如,在vim中使用下面的替换命令:

:s/mike/robert/

如果要再次使用该替换,就可以使用下面的命令:

:s//robert/

或者使用如下命令首先查找字符串mike,然后进行替换:

/mike/

:s//robert/

其中的空正则表达式(//)代表最后一次使用的正则表达式(/mike/)。

A6 括号表达式

使用转义圆括号“\(”和“\)”可以将正则表达式括起来(但Perl使用未转义的圆括号将正则表达式括起来)。A7.2节将介绍括号正则表达式匹配的字符串。正则表达式并不试图匹配转义的圆括号,因此带有转义圆括号的正则表达式与没有该圆括号时的正则表达式匹配的

第Ⅵ部分附录

778

字符串相同。例如,/\(rexp\)/匹配的字符串与/rexp/匹配的字符串相同;/a\(b*\)c/匹配的字符串与/ab*c/匹配的字符串相同。

转义圆括号可以嵌套使用。括号表达式仅以左侧的“\(”标识,这使得表达式的标识不存在多义性。表达式/\([a-z]\([A-Z]*\)x\)/由两个括号表达式组成,一个嵌套在另一个内。对于字符串3 t dMNORx7 l u,该正则表达式与dMNORx匹配,其中第1个括号表达式与dMNORx 匹配,第2个与MNOR匹配。

A7 替换字符串

编辑器vim和sed在替换命令中使用正则表达式来搜索字符串。可以使用特殊字符“&”和转义数字(\n)来代表对应替换字符串中匹配的字符串。

A7.1 &符号

在替换字符串中,符号&代表搜索字符串(正则表达式)所匹配的字符串的值。例如,下面的vim替换命令使用NN将包含一个或多个数字的字符串括起来,替换字符串中的&符号与正则表达式(搜索字符串)所匹配的任意数字字符串匹配。

:s/[0-9][0-9]*/NN&NN/

其中,两个字符类定义是必需的,因为正则表达式[0-9]*匹配0个或多个数字以及由0个或多个数字组成的任意字符串。

A7.2 转义数字

在搜索字符串中,括号正则表达式(如\(xxx\)[在Perl中是(xxx)])与不带转义圆括号的正则表达式匹配的字符串相同(xxx);在替换字符串中,转义数字\n代表搜索字符串中以第n个“\(”开始的括号正则表达式匹配的字符串。Perl接受转义数字,但Perl 的优选样式是在数字前面加上美元符号$n。例如,采用如下形式的姓名列表:

last-name, first-name initial

要变为如下形式:

first-name initial last-name

可以使用下面的vim命令:

:1,$s/\([^,]*\), \(.*\)/\2 \1/

这条命令在“1,$”文件中寻址所有行。替换命令s使用以斜杠分隔的一个搜索字符串和一个替换字符串。在搜索字符串中,第1个括号正则表达式\([^,]*\)与没有转义圆括号的正则表达式[^,]*所匹配的字符串相同:都与不包含逗号的0个或多个字符匹配(last-name);在第1个括号正则表达式之后的逗号和空格分别与它们自身匹配;第2个括号正则表达式\(.*\)可以

附录A 正则表达式779

与任意字符串匹配(first-name和initial)。

在替换字符串中,\2代表第2个括号正则表达式匹配的字符串,之后是一个空格,\1代表第1个括号正则表达式匹配的字符串。

A8 扩展的正则表达式

本节介绍使用扩展的特殊字符集的模式。这些模式称为完全正则表达式或扩展正则表达式。除了普通的正则表达式之外,Perl和vim还提供了扩展的正则表达式。以下3个实用程序egrep、带选项-E的grep(类似于egrep)和mawk/gawk提供了普通正则表达式和扩展正则表达式包含的所有特殊字符(“\(”和“\)”除外)。

另外两个特殊字符加号(+)和问号(?)与星号(*)类似,与它们前面出现的0个或多个字符匹配。加号与它们前面出现的1个或多个字符匹配;而问号与它们前面出现的0个或1个字符匹配。圆括号后面跟随特殊字符*、+或?将使得该特殊字符被应用到圆括号括起的字符串,与括号正则表达式中的圆括号不同,这些圆括号没有被转义(如表A-7所示)。

表A-7 扩展的正则表达式

正则表达式匹配的字符串示例

/ab+c/ a后跟1个或多个b再跟c yabcw、abbc57

/ab?c/ a后跟0个或1个b再跟c back、abcdef

/(ab)+c/ 1个或多个ab字符串后跟c zabcd、ababc!

/(ab)?c/ 0个或1个ab字符串后跟c xc、abcc

在完全正则表达式中,特殊字符竖杠(|)是布尔OR运算符。在vim中,需要使用反斜杠来转义竖杠(\|)使其具有特殊意义。两个正则表达式之间的竖杠使与第1个表达式、第2个表达式或两个表达式匹配的字符串匹配。使用带圆括号的竖杠可以将进行OR运算的两个正则表达式与表达式的其他部分分开(如表A-8所示)。

表A-8 完全正则表达式

正则表达式意义示例

/ab|ac/ 与ab或ac匹配 ab、ac、abac(abac为匹配正则表达式的两个字符串) /^Exit|^Quit/ 匹配以Exit或Quit开始的行 Exit

Quit

No Exit

/(D|N)\.Jones/ 与D.Jones或N.Jones匹配 P.D.Jones、N.Jones

A9 本附录小结

正则表达式定义了由一个或多个字符串组成的集合。正则表达式与它定义的字符串匹配。

第Ⅵ部分附录

780

在正则表达式中,特殊字符指不代表其自身的字符。表A-9列出了这些特殊字符。

表A-9 特殊字符

字符意义

. 与单个字符匹配

* 与星号前面一个字符的0次或多次出现匹配

^ 强制与行首匹配

$ 与行尾匹配

\ 用来转义特殊字符

\< 强制与字的开始匹配

\> 强制与字的末尾匹配

表A-10给出了表示字符类和括号正则表达式的方法。

表A-10 字符类与被括起来的正则表达式

字符类定义

[xyz] 定义了一个与x、y或z匹配的字符类

[^xyz] 定义了一个与除x、y和z之外的字符匹配的字符类

[x-z] 定义了一个与x~z之间的任意一个字母匹配的字符类

\(xyz\) 该括号正则表达式与xyz所匹配字符串相同(不用于Perl)

( xyz ) 该括号正则表达式与xyz所匹配字符串相同(仅用于Perl)

除了上面介绍的特殊字符和字符串(不包括vim中的转义圆括号)外,表A-11列出了在完全正则表达式(或扩展的正则表达式)中使用的特殊字符。

表A-11 扩展的正则表达式

表达式匹配的字符串

+ 与加号前面一个字符的1次或多次出现匹配

? 与问号前面一个字符的0次或1次出现匹配

(xyz)+ 匹配与xyz匹配的1个或多个字符串

(xyz)? 匹配与xyz匹配的0个或1个字符串

(xyz)* 匹配与xyz匹配的0个或多个字符串

xyz|abc匹配与xyz或abc匹配的字符串(在vim中使用\|)

(xy|ab)c匹配与xyc或abc匹配的字符串(在vim中使用\|)

附录A 正则表达式781表A-12列出了在sed、vim和perl的替换字符串中使用的特殊字符。

表A-12 替换字符串

字符串代表的意义

& 代表搜索字符串中的正则表达式匹配的字符串

\n转义数字n,代表搜索字符串中的第n个括号正则表达式匹配的字符串

&n数字n的前面加上美元符号,代表搜索字符串中的第n个括号正则表达式匹配的字符串

正则表达式

正则表达式 一、什么是这则表达式 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。一般使用的java.util.regex API所支持的正则表达式语法。 二、测试用具 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex{ public static void main(String[]args)throws Exception{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); if(br==null){ System.out.println("没有输入任何数据"); System.exit(1); } while(true){ System.out.print("输入表达式:"); Pattern pattern=https://www.360docs.net/doc/e46504288.html,pile(br.readLine()); System.out.print("输入字符串:"); Matcher matcher=pattern.matcher(br.readLine()); boolean found=false; while(matcher.find()){ System.out.println("找到子字符串"+matcher.group()+" 开始于索引"+matcher.start()+"结束于索引"+matcher.end()+"\n") found=true; } if(!found){ System.out.println("没有找到子字符串\n"); } } } }

正则表达式经典手册

引言 正则表达式(regular expression)就是用一个“表达式”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+” 描述的特征是“一个 'a' 和任意个'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合这个特征。 正则表达式可以用来:(1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。 正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。 文章中的每一个举例,都可以点击进入到测试页面进行测试。闲话少说,开始。 1. 正则表达式规则 1.1 普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同) 举例2:表达式 "bcd",在匹配字符串 "abcde" 时,匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。 1.2 简单的转义字符 一些不便书写的字符,采用在前面加 "\" 的方法。这些字符其实我们都已经熟知了。

正则表达式

1.验证用户名和密码:("^[a-zA-Z]\w{5,15}$")正确格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位; 2.验证电话号码:("^(\d{3,4}-)\d{7,8}$")正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx; 3.验证手机号码:"^1[3|4|5|7|8][0-9]\\d{8}$"; 4.验证身份证号(15位或18位数字):"\d{14}[[0-9],0-9xX]"; 5.验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"); 6.只能输入由数字和26个英文字母组成的字符串:("^[A-Za-z0-9]+$"); 7.整数或者小数:^[0-9]+([.][0-9]+){0,1}$ 8.只能输入数字:"^[0-9]*$"。 9.只能输入n位的数字:"^\d{n}$"。 10.只能输入至少n位的数字:"^\d{n,}$"。 11.只能输入m~n位的数字:"^\d{m,n}$"。 12.只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 13.只能输入有两位小数的正实数:"^[0-9]+(\.[0-9]{2})?$"。 14.只能输入有1~3位小数的正实数:"^[0-9]+(\.[0-9]{1,3})?$"。 15.只能输入非零的正整数:"^\+?[1-9][0-9]*$"。 16.只能输入非零的负整数:"^\-[1-9][0-9]*$"。 17.只能输入长度为3的字符:"^.{3}$"。 18.只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。 19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。 20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。 21.验证是否含有^%&',;=?$\"等字符:"[%&',;=?$\\^]+"。 22.只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"。 23.验证URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 24.验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"10"~"12"。 25.验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"、"10"~"29"和“30”~“31”。 26.获取日期正则表达式:\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日? 评注:可用来匹配大多数年月日信息。 27.匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 28.匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 29.匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 30.匹配首尾空白字符的正则表达式:^\s*|\s*$

正则表达式1

正则表达式 7.1、在JavaScript中,正则表达式是对Perl版的改进和发展。 7.2、^表示一个字符串的开始,$表示一个字符串的结束。 7.3、(?:...)表示一个非捕获型分组(noncapturing group)。 7.4、(...)表示一个捕获型分组(capturing group)。 7.5、[...]表示一个字符类,[^?#]表示一个字符类包含除?和#之外的所有字符。 7.6、有两个方法来创建RegExp对象。优先采用正则表达式字面量。如下: var my_regexp=/"(?:\\.|[^\\\"])*"/g;但如果要使用RegExp构造器创建一个正则表达式,要多加小心,因为反斜杠在正则表达式和在字符串字面量中有不同的含义。通常需要双写反斜杠及对引号进行转义: var my_regexp=new RegExp("\"(?:\\.|[^\\\\\\\"])*\"",'g');7.7、在RegExp中,有三个标志:g、i和m。 7.8、RegExp对象的属性 属性用法 global如果标志g被使用,值为true ignoreCase如果标志i被使用,值为true lastIndex下一次exec匹配开始的索引。初始值为0 multiline如果m被使用,值为true source正则表达式源代码文本 7.9、一个正则表达式因子可以是一个字符、一个由圆括号包围的组、一个字符类,或者是一个转义序列。除了控制字符和特殊字符以外,所有的字符都将被按照字面处理:\/[](){}?+*|.^$ 如果上面列出的字符按字面去【匹配,那么必须要一个\前缀来进行转移。 7.10、正则表达式转义: \f是换页符,\n是换行符,\r是回车符,\t是制表符,\u允许指定一个Unicode字符来表示一个十六进制的常量 \d等同于[0-9] \s等同于[\f\n\r\t\u000B\u0020\u00A0\u2028\u2029]。这是Unicode空白符的一个不完全子集。\S表示与其相反的:[^\f\n\r\t\u000B\u0020\u00A0\u2028\u2029] \w等同于[0-9A-Z_a-z]。\W则表示与其相反。 \b被指定为一个字的边界标志。 \1是指分组1所捕获到的文本的一个引用,\2指向分组2的引用,\3指向分组3的引用,以此类推。 7.11、正则表达式分组共有4种:捕获型、非捕获型、向前正向匹配和向前负向匹配。7.12、正则表达式字符类内部的转义规则和正则表达式因子相比稍有不同。[\b]是退格符。下面是在字符类中需要被转义的特殊字符: -/[\]^ 7.13、正则表达式因子可以用一个正则表达式量词后缀,用来决定这个因子应该被匹配的次数。包围在一对花括号中的一个数字表示这个因子应该被匹配的次数。所以,/www/和/w{3}/等价。{3,6}将【匹配3、4、5或6次。{3,}匹配3次或更多次。 7.14、?等同于{0,1}。*等同于{0,}+则等同于{1,}。 7.15、如果只有一个量词,则趋向于进行贪婪性的匹配,即匹配尽可能多的重复直至达到上限。如果这个量词还有一个额外的后缀?,那么则趋向于进行懒惰性匹配,即试图匹配尽可

PHP 常用正则表达式 正则

PHP 常用正则表达式正则 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:"^\d+$"//非负整数(正整数+ 0) "^[0-9]*[1-9][0-9]*$"//正整数 "^((-\d+)|(0+))$"//非正整数(负整数+ 0) "^-[0-9]*[1-9][0-9]*$"//负整数 "^-?\d+$"//整数 "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 "^(-?\d+)(\.\d+)?$"//浮点数 "^[A-Za-z]+$"//由26个英文字母组成的字符串 "^[A-Z]+$"//由26个英文字母的大写组成的字符串 "^[a-z]+$"//由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 元字符及其在正则表达式上下文中的行为: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转

正则表达式语法完整版

正则表达式基础知识 一个正则表达式就是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

下面看几个例子: "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的字符串。 '*','+'和'?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或更多”,“一次或更多”还有“没有或一次”。下面是几个例子: "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);"ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。 也可以使用范围,用大括号括起,用以表示重复次数的范围。 "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。 还有,你可能注意到了,'*','+'和'?'相当于"{0,}","{1,}"和"{0,1}"。 还有一个'|',表示“或”操作: "hi|hello":表示一个字符串里有"hi"或者"hello"; "(b|cd)ef":表示"bef"或"cdef"; "(a|b)*c":表示一串"a""b"混合的字符串后面跟一个"c"; '.'可以替代任何字符: "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符); 方括号表示某些字符允许在一个字符串中的某一特定位置出现: "[ab]":表示一个字符串有一个"a"或"b"(相当于"a|b"); "[a-d]":表示一个字符串包含小写的'a'到'd'中的一个(相当于"a|b|c|d"或者"[abcd]");"^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; "[0-9]+":表示一个以上的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。 你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。 为了逐字表达,必须在"^.$()|*+?{\"这些字符前加上转移字符'\'。 请注意在方括号中,不需要转义字符。

正则表达式

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。 字符描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。 + 匹配前面的子表达式一次或多次。例如,“z o+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。 ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“d o”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。 {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“fo o o ood”中的所有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”。 点匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式。

[VIP专享]经典正则表达式QRegExp的解析

QRegExp正则表达式 2010-03-20 17:00 "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\d+$" //整数 "^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0- 9]*[1-9][0-9]*)))$" //负浮点数 "^(-?\d+)(\.\d+)?$" //浮点数 "^[A-Za-z]+$" //由26个英文字母组成的字符串 "^[A-Z]+$" //由26个英文字母的大写组成的字符串 "^[a-z]+$" //由26个英文字母的小写组成的字符串 "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串 "^\w+$" //由数字、26个英文字母或者下划线组成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url "^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$" // 年-月-日 "^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$" // 月/日/年 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Email "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0- 5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址 ^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正则表达式 ^[-+]?\d+(\.\d+)?$ //值类型正则表达式 QRegExp是Qt的正则表达式类. Qt中有两个不同类的正则表达式. 第一类为元字符.它表示一个或多个常量表达式. 令一类为转义字符,它代表一个特殊字符. 一.元字符 . 匹配任意单个字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3

正则表达式7

Java正则表达式详解 仙人掌工作室 如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。 许多语言,包括Perl、PHP、Python、JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能。那么Java又怎样呢?本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从https://www.360docs.net/doc/e46504288.html,下载源代码开放的Jakarta-ORO库。本文接下来的内容先简要地介绍正则表达式的入门知识,然后以Jakarta-ORO API为例介绍如何使用正则表达式。 一、正则表达式基础知识 我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说: 1.1句点符号 假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符: 1.2方括号符号 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符 1.3“或”符号

Excel中使用正则表达式

Excel另类条件化格式 1 前言 我们知道,Excel的条件化格式可以根据单元个的内容来设置整个单元格的格式。如图1中的C列,当单元格的内容为“结束”时,字体颜色为绿色,为“进行中”时,颜色为黄色。但如果我们想把B列的部分特定文字(如日期2012-3-4)设置成不同的字体和颜色, Excel的条件化格式工具是不能实现的,需要另辟蹊径。 图1 2 实现过程 2.1 目标 实现B列单元格中日期字符串的字体设置成“Arial Black”字体,颜色为红色。 2.2 设计思路 Excel的VBA编程功能很强大,可以轻松实现上述目标。程序的设计思路是:找到日期字符串,然后设置字体格式。本例中利用了正则表达式来寻找日期字符串,通过Characters对象的Font属性来设置字符串的格式。 2.3 正则表达式 我们在处理文本时,经常会遇到一些满足某种规则的字符串。比如,一个无符号的整数由一连串的数字构成,本例中的日期是满足“整数-整数-整数”规则的字符串。正则表达式就是用来指定这种规则的。如果某个字符串满足正则表达式指定的规则,则称该字符串为正则表达式的一个“匹配串”。正则表达式中用\d 来匹配单个数字,用\d+来匹配连续的多个数字,这样本例中用"\d+-\d+-\d+"就可以匹配日期字符串。Excel的VBA可以通过引用vbscript中的正则标定式对象"vbscript.regexp"来使用正则表达式。 2.4 Characters函数 语法:Characters(start, length) 参数:Start是指从第几个字符处开始选择,length是要返回的字符数。 返回:Characters对象。用来控件文本中某一范围的字符串。例如,通过Characters对象的Font属性可以设置字符串的字体格式。 2.5程序代码 把FormatClick程序和“更新”按钮的Click事件关联起来,只要点击“更新”按钮就可以更新日期的字体的名称和颜色了。具体程序如下: Sub FormatClick() '声明正则表达式对象 Dim RegEx As Object '引用正则标定式对象 Set RegEx = CreateObject("vbscript.regexp")

很完整的一篇正则表达式总结

1、正则表达式-完结篇---工具类开发--- ? 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 '/.+/', 'email'=> '/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', 'url'=> '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/ \?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?$/', 'currency'=> '/^\d+(\.\d+)?$/', 'number'=> '/^\d+$/', 'zip'=> '/^\d{6}$/', 'integer'=> '/^[-\+]?\d+$/', 'double'=> '/^[-\+]?\d+(\.\d+)?$/',

5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2'english'=> '/^[A-Za-z]+$/', 'qq'=> '/^\d{5,11}$/', 'mobile'=> '/^1(3|4|5|7|8)\d{9}$/', ); //定义其他属性 private$returnMatchResult=false; //返回类型判断 private$fixMode=null; //修正模式 private$matches=array(); //存放匹配结果 private$isMatch=false; //构造函数,实例化后传入默认的两个参数 public function __construct($returnMatchResult=false,$fixMode=null){ $this->returnMatchResult=$returnMatchResult; $this->fixMode=$fixMode; } //判断返回结果类型,为匹配结果matches还是匹配成功与否isMatch,并调用返回方法 private function regex($pattern,$subject){ if(array_key_exists(strtolower($pattern), $this->validate)) $pattern=$this->validate[$pattern].$this->fixMode; //判断后再连接上修正模式作为匹配的正则表达式 $this->returnMatchResult ?

语法词法生成器

语法词法生成器 一、语法词法生成器Flex 语法扫描器生成器 flex (fast lexical analyser generator) 是Lex的另一个替代品。它经常和自由软件Bison语法分析器生成器一起使用。Flex 最初由Vern Paxson 于1987 年用C语言写成。语法分析生成器JavaCC JavaCC(Java Compiler Compiler) 是一个用JA V A开发的最受欢迎的语法分析生成器。这个分析生成器工具可以读取上下文无关且有着特殊意义的语法并把它转换成可以识别且匹 配该语法的JA VA程序。它还提供JJTree等工具来...语法分析器生成工具YACC 这是一个经典的生成语法分析器的工具,大学的《编译原理》课程里介绍过。词法分析工具ANTLR ANTLR(ANother Tool for Language Recognition)它是Java开发的词法分析工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。作为翻译程序的一部分,你可以使用简单的操作符和动作来参数化你的文法...解析器生成器

Bison GNU bison是一个自由软件,用于自动生成语法分析器程序,实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新近版本中,Bison增加了对GLR语法分析算法的支...词法分析器生成工具Lex 这是一个经典的生成词法分析器的工具语法分析器生成工 具Berkeley Yacc Berkeley Yacc (byacc) 是一个高质量的yacc 变种,其目的是为了避免依赖某个特定的编译器。语法分析生成器JFlex JFlex是一个Java的词法/语法分析生成器。JavaScript解析器Jison JavaScript解析器,Coffee就是使用Jison解析的。Jison 将一个上下文无关语法作为输入,输出对应的JavaScript代码,类似Yacc。词法/语法分析框架chrysanthemum chrysanthemum (中文名“菊花”)是一个由C++写成的小巧

正则表达式 (1)

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时,dir *.txt或ls *.txt中的*.txt就不是一个正则表达式,因为这里*与正则式的*的含义是不同的。 正则表达式是由普通字符(例如字符a 到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 3.1 普通字符 由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符,所有数字,所有标点符号以及一些符号。 3.2 非打印字符 字符含义 \cx 匹配由x指明的控制字符。例如,\cM 匹配一个Control-M 或回车符。x 的值必须为A-Z 或a-z 之一。否则,将c 视为一个原义的‘c’ 字符。 \f 匹配一个换页符。等价于\x0c 和\cL。 \n 匹配一个换行符。等价于\x0a 和\cJ。 \r 匹配一个回车符。等价于\x0d 和\cM。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。\S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于\x09 和\cI。 \v 匹配一个垂直制表符。等价于\x0b 和\cK。

3.5 定位符 用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。不能对定位符使用限定符。 3.6 选择 用圆括号将所有选择项括起来,相邻的选择项之间用|分隔。但用圆括号会有一个副作用,是相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用。 其中?:是非捕获元之一,还有两个非捕获元是?=和?!,这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串,后者为负向预查,在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。 3.7 后向引用 对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从1 开始,连续编号直至最大99 个子表达式。每个缓冲区都可以使用‘\n’ 访问,其中n 为一个标识特定缓冲区的一位或两位十进制数。 可以使用非捕获元字符‘?:’, ‘?=’, or ‘?!’ 来忽略对相关匹配的保存。 4. 各种操作符的运算优先级 相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下: 操作符描述 \ 转义符 (), (?:), (?=), [] 圆括号和方括号 *, +, ?, {n}, {n,}, {n,m} 限定符 ^, $, \anymetacharacter 位置和顺序 | “或”操作 5. 全部符号解释

常用正则表达式

1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$"//非负整数(正整数+ 0) 3. "^[0-9]*[1-9][0-9]*$"//正整数 4. "^((-\d+)|(0+))$"//非正整数(负整数+ 0) 5. "^-[0-9]*[1-9][0-9]*$"//负整数 6. "^-?\d+$"//整数 7. "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) 8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数 9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) 10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 11. "^(-?\d+)(\.\d+)?$"//浮点数 12. "^[A-Za-z]+$"//由26个英文字母组成的字符串 13. "^[A-Z]+$"//由26个英文字母的大写组成的字符串 14. "^[a-z]+$"//由26个英文字母的小写组成的字符串 15. "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 16. "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url 19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 24. 25. 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 26. 匹配双字节字符(包括汉字在内):[^\x00-\xff] 27. 匹配空行的正则表达式:\n[\s| ]*\r 28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 29. 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 31. 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 35. 36. 37. 元字符及其在正则表达式上下文中的行为:

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.360docs.net/doc/e46504288.html,, 1_2@987-6.54,当然符合这个模式的不全是合法的 email 地址,但至少可以做一次初步筛选, 筛掉 a.b,c@d 等肯定不是 email 地址的字符串.再比如,找出所有符合 yyy.yyy.yyy.yyy 模 式的字符串(也就是 IP 地址),要求 y 是 0-9 的数字,IP 地址的每一部分可以有 1-3 个 y 字 符. 如果要用 grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串 呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的 x 和 y,它们在模式中表示一个字符,但是取 值范围是一类字符中的任意一个. 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个 x 字符,IP 地址 的每一部分可以有 1-3 个 y 字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和. 隔开,IP 地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述.为 了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍.
规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一 起表示一个模式,这就是正则表达式(Regular Expression).例如 email 地址的正则表达式 可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP 地址的正则表达式可以 写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.下一节介绍正则表达式的语法, 我们先看看正则表达式在 grep 中怎么用.例如有这样一个文本文件 testfile:
192.168.1.1
第 1 页 共 10 页

正则表达式经典教程

正则表达式是常见常忘,所以还是记下来比较保险,于是就有了这篇笔记。 希望对大家会有所帮助。J 1.什么是正则表达式 简单的说,正则表达式是一种可以用于文字模式匹配和替换的强有力的工具。是由一系列普通字符和特殊字符组成的能明确描述文本字符串的文字匹配模式。 正则表达式并非一门专用语言,但也可以看作是一种语言,它可以让用户通过使用一系列普通字符和特殊字符构建能明确描述文本字符串的匹配模式。除了简单描述这些模式之外,正则表达式解释引擎通常可用于遍历匹配,并使用模式作为分隔符来将字符串解析为子字符串,或以智能方式替换文本或重新设置文本格式。正则表达式为解决与文本处理有关的许多常见任务提供了有效而简捷的方式。 正则表达式具有两种标准: ·基本的正则表达式(BRE – Basic Regular Expressions) ·扩展的正则表达式(ERE – Extended Regular Expressions)。 ERE包括BRE功能和另外其它的概念。 正则表达式目前有两种解释引擎: ·基于字符驱动(text-directed engine) ·基于正则表达式驱动(regex-directed engine) Jeffery Friedl把它们称作DFA和NFA解释引擎。 约定: 为了描述起来方便,在本文中做一些约定: 1. 本文所举例的所有表达时都是基于NFA解释引擎的。 2. 正则表达式,也就是匹配模式,会简写为Regex。 3. Regex的匹配目标,也就是目标字符串,会简写为String。 4. 匹配结果用会用黄色底色标识。 5. 用1\+1=2 括起来的表示这是一个regex。 6. 举例会用以下格式: Regex Target String Description test This is a test 会匹配test,testcase等 2.正则表达式的起源正则表达式的?祖先?可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为?神经网事件的表示法?的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为?正则集的代数?的表达式,因此采用?正则表达式?这个术语。

相关文档
最新文档