All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
sql server日志文件总结及日志满的处理办法_[SQL Server教程]
在asp.net,页面中加入skype功能_.net资料_编程技术
用正则表达式过滤脚本的研究(ASP.net)_[Asp.Net教程]
asp.net的异常处理机制讲解_[Asp.Net教程]
visit c++中如何打开记录集
下一代ADO.NET:ADO.NET,Entity,Framework_[Asp.Net教程]
asp.net得到GridView中自定义控件的值_[Asp.Net教程]
用em指定字体尺寸的问题和解决办法_[Html教程]
More,Effective,C++之智能指针_[Asp.Net教程]
Delphi浏览sql server数据库中的信息
Reading number is top 10 pictures
Sora aoi on twitter1
性感丰满身材火爆de美女1
Average female college students1
囚犯暴乱了咋办?
Parking technology is great, that give you the keys can't stolen
Take you to walk into the most true north Korea rural1
Household design classic black and white
Distribution of wealth in China survey status report
王艳写真温柔如水1
美丽的少女1
Download software ranking
金山office2007
Take off clothes to survival
Boxer's Top ten classic battle5
Boxer vs Yellow2
Tram sex maniac 2 (H) rar bag2
电脑知识及技巧大合集
Unix video tutorial13
The Bermuda triangle3
asp.netWeb服务器高级编程
Sora aoi‘s film--Lust fan wall
归海一刀 published in(发表于) 2014/2/10 6:46:58 Edit(编辑)
PHP中的正则表达式_[PHP教程]

PHP中的正则表达式_[PHP教程]

PHP中的正则表达式_[PHP教程]

综述

正则表达式是一种可以用于模式匹配和替换的强有力的工具。正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。


如何使用基本模式匹配?


  模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符重复出现,或表示上下文。我们先看一些正则表达式中的特殊字符。


特殊字符"^"用来匹配以指定字符串开头的字符串。例如:


"^hello" :这个模式与字符串"hello,PHP world!"匹配,但是与"Say hello to you"不匹配。


特殊字符""用来匹配以指定字符串结尾的字符串。例如:


"you" :这个模式与"How are you"匹配,与"your"不匹配。


当特殊字符"^"和""同时使用时,表示精确匹配。例如:


"^hello" :这个模式只匹配字符串"hello"。


如果一个模式不包括"^"和"",那么它与任何包含该模式的字符串匹配。例如: "you" :与字符串"What is your name?"是匹配的。


在该模式中的字母只是普通的字符,数字也是一样的。


如果要用到其他一些稍微复杂的字符,如标点符号和空白字符(比如空格、制表符等),就要要用到转义序列。所有的转义序列都用反斜杠("\")打头,例如制表符的转义序列是:"\t"。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:


"^\t"


类似的,用"\n"表示换行,"\r"表示回车,反斜杠本身用"\\"表示,句号"."用"\."表示,依此类推。


如何使用字符簇?


如果要判断用户输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符串比较是不够的。所以要用一种更好的方法来描述我们想要的模式,这就是字符簇。


比如,要建立一个表示所有元音字符的字符簇,就可以这样做:


"[AaEeIiOoUu]" :这个模式与任何元音字符匹配,但只能表示一个字符。


用特殊符号"-"可以表示一个字符的范围,如:



"[a-z]"
//匹配字母a-z,即所有的小写字母
"[A-Z]"
//匹配字母A-Z,即所有的大写字母
"[a-zA-Z]"
//匹配所有的字母
"[0-9]"
//匹配所有的数字
"[0-9\.\-]"
//匹配所有的数字,以及句号和减号
"[ \f\r\t\n]"
//匹配所有的白字符


同样的,这些也只匹配一个字符。


如果要匹配由一个小写字母和一位数字组成的字符串,比如"a4"、"b5"或"f1",但不是"aa4"、"b5a4" 或"f12"的话,用这个模式:


"^[a-z][0-9]"


尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。


我们已经知道"^"表示字符串的开头,但是当在一组方括号里使用"^"时,它表示"非"或"排除"的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字: "^[^0-9][0-9]"


这个模式与"a4"、"b5"及"+2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:


"[^a-z]" //除了小写字母以外的所有字符
"[^\\\/\^]" //除了(\)(/)(^)之外的所有字符
"[^\"\']" //除了双引号(")和单引号(')之外的所有字符


特殊字符"." (点,英文句号)在正规表达式中用来匹配除了"换行"之外的所有字符。所以模式"^.5"与任何两个字符的、以数字5结尾和以其他非"换行"字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个"换行"的字符串。


PHP的正规表达式有一些内置的通用字符簇,列表如下:



字符簇
含义
"[[:alpha:]]"
任何字母
"[[:digit:]]"
任何数字
"[[:alnum:]]"
任何字母和数字
"[[:space:]]"
任何白字符
"[[:upper:]]"
任何大写字母
"[[:lower:]]"
任何小写字母
"[[:punct:]]"
任何标点符号
"[[:xdigit:]]"
任何16进制的数字,相当于[0-9a-fA-F]

如何匹配重复出现的情况?


在很多的情况下,我们可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单一的数字组成。我们用跟在字符或字符簇后面的花括?quot;{}"来确定前面的内容的重复出现的次数:假设x是一个数字,那么{x}表示"前面的字符或字符簇只出现x次";一个数字加逗号,{x,}的意思是"前面的内容出现x或更多的次数";两个用逗号分隔的数字,{x,y}表示"前面的内容至少出现x次,但不超过y次"。


字符簇
含义
"^[a-zA-Z_]"
所有的字母和下划线
"^[[:alpha:]]{3}"
所有的3个字母的单词
"^a"
字母a
"^a{4}"
不是以字母a开头并且有4个字母的单词,比如Aaaa
^a{2,4}"
aa,aaa或aaaa
"^a{1,3}"
a,aa或aaa
"^a{2,}"
包含多于两个a的字符串,比如aaa,aaaa,aaaaa
"^a{2,}"
以两个a开头的单词,如:aardvark和aaab,但apple不行
"a{2,}"
包含有两个a的单词,如:baad和aaa,但Nantucket不行
"\t{2}"
两个制表符
".{2}"
所有的两个字符

我们可以把模式扩展到更多的单词或数字:


"^[a-zA-Z0-9_]{1,}"
所有包含一个以上的字母、数字或下划线的字符串
"^[0-9]{1,}"
所有的正数
"^\-{0,1}[0-9]{1,}"
所有的整数
"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}"
所有的整数

最后一个例子我们可以这样考虑:所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,}),并且没有其他任何东西()。


特殊字符"?"与"{0,1}"是相等的,它们都代表着:"0个或1个前面的内容"或"前面的内容是可选的"。所以:


"^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}"


可以简化为:


^\-?[0-9]{0,}\.?[0-9]{0,}


特殊字符"*"与"{0,}"是相等的,它们都代表着"0个或多个前面的内容"。字符"+"与{1,}是相等的,表示"1个或多个前面的内容",所以上面的4个例子可以写成:


"^[a-zA-Z0-9_]+"
所有包含一个以上的字母、数字或下划线的字符串
"^[0-9]+"
所有的正数
"^\-?[0-9]+"
所有的整数
"^\-?[0-9]*\.?[0-9]*"
所有的小数





添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.