您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > 最经典的正则表达式教程之--PHP正则表达式
PHP正则表达式TensSun正则表达式基础知识字符集POSIX扩展正则表达式函数Perl兼容正则表达式函数邮件的格式:tenssun@163.com其中tenssun是用户名,163.com是服务器名用户名只能由英文字母a~z(不区分大小写)、数字0~9、下划线组成。用户名的起始字符必须是英文字母.如:netease_2005用户名长度为5~20个字符。服务器名只能由英文字母a~z(不区分大小写)、数字0~9、下划线及点组成,@后点前面长度限制为1-10个字符,点后面的限制为com,cn,com.cn,net。从邮件验证说起从邮件验证说起先写用户名的正则表达式^[a-zA-Z][0-9a-zA-Z_]{4,19}再写主机名的正则表达式[0-9a-zA-Z_]{1,10}(\.)(com|cn|com.cn|net)$再把前后拼起来则为:^[a-zA-Z][0-9a-zA-Z_]{4,19}@[0-9a-zA-Z_]{1,10}(\.)(com|cn|com.cn|net)$邮件验证实例?php$email='wjj7r8y6@jj.net';if(ereg(^[a-zA-Z][0-9a-zA-Z_]{4,19}@[0-9a-zA-Z_]{1,10}(\.)(com|cn|com.cn|net)$,$email)){echo'email格式正确';}?^和$看到前面的邮件验证大部分人可能会感到头痛,别急下面我们慢慢分解开篇,还是得说说^和$他们是分别用来匹配字符串的开始和结束,下面法举例说明^The:开头一定要有The字符串;ofdespair$:结尾一定要有ofdespair的字符串;那么,^abc$:就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配notice:匹配包含notice的字符串你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说模式(正则表达式)可以出现在被检验字符串的任何地方,你没有把他锁定到两边(开始或结束)'*','+',和'?',接着,说说'*','+',和'?',他们用来表示一个字符可以出现的次数或者顺序.他们分别表示:*表示出现0次或1次或多次相当于{0,},+表示出现1次或多次相当于{1,},?表示出现0次或1次相当于{0,1},这里是一些例子:ab*:和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串(a,ab,abbb,等);ab+:和ab{1,}同义,同上条一样,但最少要有一个b存在(ab,abbb,等.);ab?:和ab{0,1}同义,可以没有或者只有一个b;a?b+$:匹配以一个或者0个a再加上一个以上的b结尾的字符串.要点,'*','+',和'?'只管它前面那个字符.{}你也可以在大括号里面限制字符出现的个数,比如ah{2}:要求a后面一定要跟两个h(一个也不能少)(ahh);ah{2,}:要求a后面一定要有两个或者两个以上h(如ahh,ahhhh,等.);ah{3,5}:要求a后面可以有3-5个h(ahhh,ahhhh,orahhhhh).(){}现在我们把一定要的几个字符放到小括号里,比如:“a(bc)*”:匹配a后面跟0个或者多个bc;a(bc){1,5}:一个到5个bc.'│'还有一个字符'│',相当于OR(或者)操作:hi│hello:匹配含有hi或者hello的字符串;(b│cd)ef:匹配含有bef或者cdef的字符串;(a│b)*c:匹配含有这样多个(包括0个)a或b,后面跟一个c的字符串;'.'一个点('.')可以代表所有的单一字符,不包括\n如果,要匹配包括\n在内的所有单个字符,怎么办?用'[\n.]'这种模式.a.[0-9]:一个a加一个字符再加一个0到9的数字.{3}$:三个任意字符结尾.[]中括号括住的内容只匹配一个单一的字符[ab]:匹配单个的a或者b(和a│b一样);[a-d]:匹配'a'到'd'的单个字符(和a│b│c│d还有[abcd]效果一样);一般我们都用[a-zA-Z]来指定字符为一个大小写英文^[a-zA-Z]:匹配以大小写字母开头的字符串[0-9]%:匹配含有形如x%的字符串,[a-zA-Z0-9]$:匹配以逗号再加一个数字或字母结尾的字符串^[]和[^]的区别你也可以把你不想要得字符列在中括号里,你只需要在总括号里面使用'^'作为开头%[^a-zA-Z]%匹配含有两个百分号里面有一个非字母的字符串.要点:^用在中括号开头的时候,就表示排除括号里的字符不要忘记在中括号里面的字符是这条规路的例外—在中括号里面,所有的特殊字符,包括(''),都将失去他们的特殊性质[*\+?{}.]匹配含有这些字符的字符串.{}\b看了上面的例子,你对{n,m}应该理解了吧.要注意的是,n和m都不能为负整数,而且n总是小于m.这样,才能最少匹配n次且最多匹配m次.如p{1,5}将匹配pvpppppp中的前五个p下面说说以\开头的\b书上说他是用来匹配一个单词边界,就是...比如've\b',可以匹配love里的ve而不匹配very里有ve\B正好和上面的\b相反.例子我就不举了应用好,说了这么多下面我们再回过头来看我们的邮件正则怎么构造的:用户名的正则表达式^[a-zA-Z][0-9a-zA-Z_]{4,19}a-z表示a到z的所有小写字母A-Z表示A到Z的所有大写字母但是[]只能取一个字符所以[a-zA-Z]只能取其中一个符,也就是从所有的大小写英文字母中只能取一个字母^放在[]外面表示开始所以^[a-zA-Z]表示以一个英文字母开头应用[0-9a-zA-Z_]表示从所有的阿拉伯数字和英文及_中取一个字符,而{4,19}表示匹配最少4次,最多9次显然[0-9a-zA-Z_]{4,19}表示前面的字符至少出现4次,最多出现19次.那么现在请问下面这个表达式所表达的意思^[a-zA-Z][0-9a-zA-Z_]{4,19}(\.)表示一个点别和'.'混淆了'.'是表示除\n的任意一个字符()表示这是个子母式(com|cn|com.cn|net)$表示以com或cn或com.cn或net结尾的一串字符正则表达式简介(一)正则表达式是用于描述字符排列模式一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。在程序语言中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/apple/”。用户只要把需要匹配的模式内容放入定界之间即可。如果使用一个没有特殊字符的正则表达式,相当于纯文本搜索,使用strstr()函数也可达到同样的效果。正则表达式简介(二)在PHP中有两套正则表达式函数库,两者功能相似,只是执行效率略有差异:一套是由PCRE(PerlCompatibleRegularExpression)库提供的。使用“preg_”为前缀命名的函数;一套由POSIX(PortableOperationSysteminterface)扩展提供的。使用以“ereg_”为前缀命名的函数;使用正则表达式的原因之一,是在典型的搜索和替换操作中,只能对确切文字进行匹配,对象动态文本的搜索就有困难了,甚至是不可能的。/^-?\d+$|^-?0[xX][\da-fA-F]+$//^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+){0,3}]$/正则表达式较重要和较有用的角色是验证用户数据的有效性检查。PHP中,正则表达式有三个作用:匹配,也常常用于从字符串中析取信息。用新文本代替匹配文本。将一个字符串拆分为一组更小的信息块。正则表达式的语法规则正则表达式是主要由:原子(普通字符,如英文字符)元字符(有特殊功用的字符)以及模式修正字符组成。一个正则表达式中至少包含一个原子。原子(Atom)原子是组成正则表达式的基本单位,在分析正则表达式时,应作为一个整体。原子字符是由所有末显式指定为元字符的打印和非打印字符组成。这包括所有的英文字母、数字、标点符号以及其他一些符号。原子也包括以下内容。单个字符、数字,如a~z,A~Z,0~9.模式单元,如(ABC).可以理解为由多个原子组成的大的原子。原子表,如[ABC].重新使用的模式单元。普通转义字符。转义元字符。正则表达式所使用的普通转义字符原子说明--------------------------------------------------------------------------------------------------------\d匹配一个数字;等价于[0-9]\D匹配除数字以外任何一个字符;等价于[^0-9]\w匹配一个英文字母、数字或下划线;等价于[0-9a-zA-Z_]\W匹配除英文字母、数字和下划线以外任何一个字符;等价于[^0-9a-zA-Z_]\s匹配一个空白字符;等价于[\f\n\r\t\v]\S匹配除空白字符以外任何一个字符;等价于[^\f\n\r\t\v]\f匹配一个换页符等价于\x0c或\cL\n匹配一个换行符;等价于\x0a或\cJ\r匹配一个回车符等价于\x0d或\cM\t匹配一个制表符;等价于\x09\或\cl\v匹配一个垂直制表符;等价于\x0b或\ck\oNN匹配一个八进制数字\xNN匹配一个十六进制数字\cC匹配一个控制字符元字符(Meta-character)元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式中包含元字符本身,必须在其前加上”\”进行转义说明元字符*0次、1次或多次匹配其前的原子+1次或多次匹配其前的原子?0次或1次匹配其前的原子.匹配任何一个字符|匹配两个或多个选择^或\A匹配字符串串首的原子$或\Z匹配字符串串尾的原子\b匹配单词的边界\B匹配除单词边界以外的部分[]匹配方括号中的任一原子[^]匹配除方括号中的原子外的任何字符()整体表示一个原子{m}表示其前原子恰好出现m次{m,n}表示其前原子至少出现m次,至多出现n次(nm){m,}表示其前原子出现不少于m次原子表原子表”[]”中存放一组原子,彼此地位平等,且仅匹配其中的一个原子。如果想匹配一个”a”或”e”使用/[ae]/,例如:/Pr[ae]y/匹配”Pray”或者”Prey”。原子表”^”或者称为排除原子表,匹配除表内原子外的任意一个字符。例如:/p[^u]/匹配“part”中的“pa”,但无法匹配“computer”中的“pu”因为“u”在匹配中被排除。通常,在原子表中用“-”连接一组按ASCII码顺序排列的原子,用以简化书写。如/x[0123456789]可以写成/x[0-9]/,用来匹配一个由“x”字母与一个数字组成的字符串;/0[xX][0-9a-fA-F]/匹配一个简单的十六进制数字,如“0x9”。/[^0-9a-zA-Z_]/匹配除英文字母、数字和下划线以外任何一个字符,其等价于/\W/。重复匹配正则表达式中有一些用于重复匹配其前原子的元字符:“?”、“*”、“+”。他们主要的不同是重复匹配的次数不同。元字符“?”表示0次或1次匹配紧接在其前的原子。例如:/colou?r/匹配“colour”或“color”。元字符“*”表示0次、1次或多次匹配紧接在其前的原子。例如:/^[A-Za-z][A-Za-z0-9]*$/可以匹配“P”、“h1”或“Body”等HTML标签,并且不严格的控制大小写。元字符“+”表示1次或多次匹配紧接在其前的原子。例如:/go+gle/匹配“gogle”、“google”或“gooogle”等中间含有多个o的字符串。上文中提及的十六进制数字的例子,实际上更加完
本文标题:最经典的正则表达式教程之--PHP正则表达式
链接地址:https://www.777doc.com/doc-4365913 .html