最经典的正则表达式教程之--PHP正则表达式

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

正则表达式所使用的普通转义字符
原子 说明 -------------------------------------------------------------------------------------------------------\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 匹配一个控制字符

邮件验证实例
<?php $email='wjj7r8y6@jj.net'; if(ereg ("^[a-zA-Z][0-9a-zA-Z_]{4,19}@[0-9a-zAZ_]{1,10}(\.)(com|cn|com.cn|net)$",$email)) { echo 'email格式正确'; } ?>

使用正则表达式的原因之一,是在典型的搜索和替换操作 中,只能对确切文字进行匹配,对象动态文本的搜索就有 困难了,甚至是不可能的。

/^-?\d+$|^-?0[xX][\da-fA-F]+$/ /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+(\.[0-9a-zA-Z_-]+){0,3}]$/


应用
好,说了这么多下面我们再回过头来看我们的邮 件正则怎么构造的: 用户名的正则表达式 ^[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/”。用户只要把需要匹配的模式内容 放入定界之间即可。
() {}

现在我们把一定要的几个字符放到小括号 里,比如:
“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 的字符串;
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。

'.'

一个点('.')可以代表所有的单一字符,不包括"\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]$": 匹配以逗号再加一个数字或字母 结尾的字符串

一个正则表达式中至少包含一个原子。
原子(Atom)

原子是组成正则表达式的基本单位,在分析正则表达式时, 应作为一个整体。

原子字符是由所有末显式指定为元字符的打印和非打印字 符组成。这包括所有的英文字母、数字、标点符号以及其 他一些符号。原子也包括以下内容。

单个字符、数字,如a~z,A~Z,0~9. 模式单元,如(ABC).可以理解为由多个原子组成的大的原子。 原子表,如[ABC]. 重新使用的模式单元。 普通转义字符。 转义元字符。
{ } \b

看了上面的例子,你对{n,m}应该理解了吧.要注意 的是,n和m都不能为负整数,而且n总是小于m. 这 样,才能 最少匹配n次且最多匹配m次. 如"p{1,5}" 将匹配 "pvpppppp"中的前五个p 下面说说以\开头的 \b 书上说他是用来匹配一个单词边界,就是...比如 've\b',可以匹配love里的ve而不匹配very里有ve \B 正好和上面的\b相反.例子我就不举了

如果使用一个没有特殊字符的正则表达式,相当于纯文本搜索, 使用strstr( )函数也可达到同样的效果。
正则表达式简介(二)

在PHP中有两套正则表达式函数库,两者功能相似,只是 执行效率略有差异:

Hale Waihona Puke Baidu
一套是由PCRE(Perl Compatible Regular Expression)库提供 的。使用“preg_”为前缀命名的函数; 一套由POSIX(Portable Operation System interface)扩展提供 的。使用以“ereg_”为前缀命名的函数;
元字符(Meta-character)

元字符是用于构造规则表达式的具有特殊含义的字符。如果要在正则表达式 中包含元字符本身,必须在其前加上”\”进行转义 说明 元字符 0次、1次或多次匹配其前的原子 1次或多次匹配其前的原子 0次或1次匹配其前的原子 匹配任何一个字符 匹配两个或多个选择 匹配字符串串首的原子 匹配字符串串尾的原子 匹配单词的边界 匹配除单词边界以外的部分 匹配方括号中的任一原子 匹配除方括号中的原子外的任何字符 整体表示一个原子 表示其前原子恰好出现m次 表示其前原子至少出现m次,至多出现n次(n>m) 表示其前原子出现不少于m次

正则表达式较重要和较有用的角色是验证用户数 据的有效性检查。PHP中,正则表达式有三个作
用:

匹配,也常常用于从字符串中析取信息。 用新文本代替匹配文本。 将一个字符串拆分为一组更小的信息块。
正则表达式的语法规则

正则表达式是主要由:
原子(普通字符,如英文字符) 元字符(有特殊功用的字符) 以及模式修正字符组成。
* + ? . | ^或\A $或\Z \b \B [] [^] () {m} {m,n} {m,}
原子表




原子表”[]”中存放一组原子,彼此地位平等,且仅匹配其 中的一个原子。如果想匹配一个 ”a” 或 ”e” 使用 / [ae]/, 例如: /Pr[ae]y/ 匹配 ”Pray” 或者 ”Prey ”。 原子表 ”^” 或者称为排除原子表,匹配除表内原子外的 任意一个字符。例如:/p[^u]/匹配“part”中的“pa”,但无 法匹配“computer”中的“pu”因为“u”在匹配中被排除。 通常,在原子表中用“-”连接一组按ASCII码顺序排列的 原子,用以简化书写。 如/x[0123456789]可以写成/x[09]/,用来匹配一个由 “x” 字母与一个数字组成的字符串; /0[xX][0-9a-fA-F]/匹配一个简单的十六进制数字,如 “0x9”。/[^0-9a-zA-Z_]/匹配除英文字母、数字和下划线 以外任何一个字符,其等价于/\W/。
^[]和[^ ]的区别



你也可以把你不想要得字符列在中括号里,你只 需要在总括号里面使用'^' 作为开头 "%[^a-zAZ]%" 匹配含有两个百分号里面有一个非字母的字 符串. 要点:^用在中括号开头的时候,就表示排除括号里 的字符 不要忘记在中括号里面的字符是这条规路的例 外—在中括号里面, 所有的特殊字符,包括(''), 都 将失去他们的特殊性质 "[*\+?{}.]"匹配含有这些字 符的字符串.
'*', '+',和 '?',
接着,说说 '*', '+',和 '?', 他们用来表示一个字符可以出现的次 数或者顺序. 他们分别表示: * 表示出现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结尾的 字符串. 要点, '*', '+',和 '?'只管它前面那个字符.
^ 和 $

看到前面的邮件验证大部分人可能会感到头痛,别急下面我 们慢慢分解 开篇,还是得说说 ^ 和 $ 他们是分别用来匹配字符串的开始 和结束,下面法举例说明 "^The": 开头一定要有"The"字符串; "of despair$": 结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上 是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看见如果你没有用 我们提到的两个字符(最后一个例子),就是说 模式(正 则表达式) 可以出现在被检验字符串的任何地方,你没有 把他锁定到两边 (开始或结束)
从邮件验证说起
先写用户名的正则表达式 ^[a-zA-Z][0-9a-zA-Z_]{4,19} 再写主机名的正则表达式 [0-9a-zAZ_]{1,10}(\.)(com|cn|com.cn|net)$ 再把前后拼起来则为: ^[a-zA-Z][0-9a-zA-Z_]{4,19}@[0-9a-zAZ_]{1,10}(\.)(com|cn|com.cn|net)$
{}
你也可以在大括号里面限制字符出现的个数,比如 "ah{2}": 要求a后面一定要跟两个h(一个也不能 少)("ahh"); "ah{2,}": 要求a后面一定要有两个或者两个以上 h(如"ahh", "ahhhh", 等.); "ah{3,5}": 要求a后面可以有3-5个h("ahhh", "ahhhh", or "ahhhhh").
相关文档
最新文档