PHP网页编程之第4章 数据处置-php正则表达式-郑阿奇(...
培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。 1.正则表达式基本常识寄义:由通俗字符和(a-z)和一些特别字符构成的字符串形式
功效:无效性验证。
交换文本。
从一个字符串提取一个子字符串。
分类:POSIX和Perl
POSIX作风更轻易把握,但不克不及用于二进制形式,而perl绝对对照庞杂。
2.POSIX作风的正则表达式
1.编写正则表达式
表4.3 POSIX正则表达式语法格局列表
字 符
描 述
\
本义字符,用于本义特别字符。例如,'.'婚配单个字符,'\.'婚配一个点号。'\-'婚配连字符'-','\\'婚配符号'\'
^
婚配输出字符串的入手下手地位。例如'^he'暗示以'he'开首的字符串
$
婚配输出字符串的停止地位。例如,'ok$'暗示以'ok'开头的字符串
*
婚配后面的子表达式零次或屡次。例如,'zo*'能婚配"z"和"zoo"。*等价于{0,}
+
婚配后面的子表达式一次或屡次。例如,'zo+'能婚配"zo"和"zoo",但不克不及婚配"z"。+等价于{1,}
?
婚配后面的子表达式零次或一次。例如,'do(es)?'可以婚配"do"或"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'
.
婚配除"\n"以外的任何单个字符,要婚配包含'\n' 在内的任何字符,可使用'[.\n]'的形式
(pattern)
婚配pattern并获得这一婚配。所获得的婚配保留到响应的数组中。要婚配圆括号字符,请利用 '\(' 或 '\)'
(?:pattern)
婚配pattern但不获得婚配了局,也就是说这是一个非获得婚配,不停止存储。这在利用"或""来组合一个形式的各个局部时很有效。例如,'industr(?:yies).就是一个比'industryindustries'更简单的表达式
(?=pattern)
正向预查,在任何婚配pattern的字符串入手下手处婚配查找字符串。这是一个非获得婚配,也就是说,该婚配不需求获得供今后利用。例如,'Windows(?=9598NT2000)'能婚配"Windows 2000"中的"Windows",但不克不及婚配"Windows 3.1"中的"Windows"。预查不用耗字符,也就是说,在一个婚配产生后,在最初一次婚配以后当即入手下手下一次婚配的搜刮,而不是从包括预查的字符以后入手下手
(?!pattern)
负向预查,在任何不婚配pattern的字符串入手下手处婚配查找字符串。这是一个非获得婚配,也就是说,该婚配不需求获得供今后利用。例如'Windows(?!9598NT2000)'能婚配"'Windows 3.1"中的"Windows",但不克不及婚配"Windows 2000"中的"Windows"。预查不用耗字符,也就是说,在一个婚配产生后,在最初一次婚配以后当即入手下手下一次婚配的搜刮,而不是从包括预查的字符以后入手下手
xy
婚配x或y。例如,'zfood' 能婚配"z"或"food",'(zf)ood'则婚配"zood"或"food"
字符纠合。婚配所包括的恣意一个字符。例如,''可以婚配"plain"中的'a'
[^xyz]
负值字符纠合。婚配未包括的恣意字符。例如,'[^abc]'可以婚配"plain"中的'p'
字符局限。婚配指定局限内的恣意字符。例如,''可以婚配'a'到'z' 局限内的恣意小写字母字符
[^a-z]
负值字符局限。婚配不在指定局限内的恣意字符。例如,'[^a-z]'可以婚配不在'a' 到'z'局限内的恣意字符
以下是几个复杂的正则表达式的例子:
●' ':暗示一切的大写字母、小写字母及0到9的数字。
●'^hello':暗示以hello入手下手的字符串。
●'world$':暗示以world开头的字符串。
●'.at':暗示以除"\n"外的恣意单个字符开首并以"at"开头的字符串,如"cat"、"nat"等。
●'^':暗示一个以字母开首的字符串。
●'hi{2}':暗示字母h后随着两个i即hii。
●'(go)+':暗示最少含有一个'go'字符串的字符串,如'gogo'
身份证号码普通由18位数字或17位数字前面加一个X或Y字母构成,要婚配身份证号码,可以写作:
^{17}(XY)$
Email地址的正则表达式可以写作:
^+@+\.+$
2.字符串的婚配
ereg()和eregi()函数
利用ereg()函数可以查找字符串与子字符串婚配的情形,并前往婚配字符串的长度,还可以借助参数前往婚配字符的数组。语法格局以下:
int ereg(string ($pattern) , string $string [, array $regs ])
复制代码 代码以下:
<?php
/*本例反省字符串是不是是ISO格局的日期(YYYY-MM-DD) */
$date="1988-08-09";
$len=ereg ('({4})-({1,2})-({1,2})', $date, $regs);//日期格局为YYYY-MM-DD
if ($len)
{
echo "$regs.$regs.$regs". "<br>"; //输入"09.08.1988"
echo $regs ."<br>"; //输入"1988-08-09"
echo $len; //输入10
}
else
{
echo "毛病的日期格局: $date";
}
?>
3.字符串的交换
ereg_replace()函数语法格局以下:
string ereg_replace(string $pattern , string $replacement , string $string)
申明:函数利用字符串$replacement交换字符串$string中与$pattern婚配的局部,并前往交换后的字符串。若未找到婚配项,则原样前往
复制代码 代码以下:
<?php
$str="hello world";
echo ereg_replace('', 'x',$str). "<br>"; //输入'hxllx wxrld'
$res='<a href=\"hello.php\">hello</a>';
echo ereg_replace('hello', $res,$str); //利用超链代替换'hello'
?>
4.朋分数组
利用split()函数可以完成与explode()函数一样的功效,并且可以依据给出的正则表达式来朋分字符串,并前往一个数组。语法格局以下:
array split(string $pattern , string $string [, int $limit ])
5.发生正则表达式
3.Perl兼容的正则表达式
1.编写正则表达式
表4.4 Perl兼容正则表达式扩大的语法格局
字 符
描 述
\b
婚配一个单词界限,也就是指单词和空格间的地位。例如,'er\b'可以婚配"never"中的 'er',但不克不及婚配"verb"中的'er'
\B
婚配非单词界限。'er\B'能婚配"verb"中的'er',但不克不及婚配"never"中的'er'
\cx
婚配由x指明的掌握字符。例如,'\cM'婚配一个Control-M或回车符。x的值必需为A~Z或a~z之一。不然,将'c'视为一个原义的'c'字符
\d
婚配一个数字字符。等价于''
\D
婚配一个非数字字符。等价于'[^0-9]'
\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'
\w
婚配包含下划线的任何单词字符。等价于''
\W
婚配任何非单词字符,等价于'[^A-Za-z0-9_]'
\xn
婚配n,个中n为十六进制本义值。十六进制本义值必需为肯定的两个数字长。例如,'\x41' 婚配"A"。'\x041'则等价于'\x04' & "1"。正则表达式中可使用ASCII编码
\num
婚配num,个中num是一个正整数。对所获得的婚配的援用。例如,'(.)\1'婚配两个一连的不异字符
\n
标记一个八进制本义值或一个后向援用。假如\n之前最少有n个获得得子表达式,则n为后向援用。不然,假如n为八进制数字(0~7),则n为一个八进制本义值
\nm
标记一个八进制本义值或一个后向援用。假如\nm之前最少有nm个获得得子表达式,则 nm为后向援用。假如\nm之前最少有n个获得,则n为一个后跟文字m的后向援用。假如后面的前提都不知足,若 n和m均为八进制数字(0~7),则\nm将婚配八进制本义值nm
\nml
假如n为八进制数字(0~3),且m和l均为八进制数字(0~7),则婚配八进制本义值nml
\un
婚配n,个中n是用4个十六进制数字暗示的Unicode字符。例如,'\u00A9'婚配版权符号( 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 基础有没有对学习php没有太大区别,关键是兴趣。 实践是检验自己会不会的真理。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
页:
[1]
2