仓酷云
标题:
PHP网站制作之揭开正则表达式语法的奥秘面纱
[打印本页]
作者:
变相怪杰
时间:
2015-2-4 00:20
标题:
PHP网站制作之揭开正则表达式语法的奥秘面纱
掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。语法|正则 正则表达式(REs)凡是被毛病地以为是只要多数人了解的一种奥秘言语。在外表上它们的确看起来混乱无章,假如你不晓得它的语法,那末它的代码在你眼里只是一堆文字渣滓罢了。实践上,正则表达式长短常复杂而且可以被了解。读完这篇文章后,你将会知晓正则表达式的通用语法。
撑持多种平台
正则表达式最早是由数学家Stephen Kleene于1956年提出,他是在对天然言语的递增研讨功效的基本上提出来的。具有完全语法的正则表达式利用在字符的格局婚配方面上,后来被使用到熔融信息手艺范畴。自从那时起,正则表达式经由几个时代的开展,如今的尺度已被ISO(国际尺度组织)同意和被Open Group组织认定。
正则表达式并不是一门公用言语,但它可用于在一个文件或字符里查找和替换文本的一种尺度。它具有两种尺度:根基的正则表达式(BRE),扩大的正则表达式(ERE)。ERE包含BRE功效和别的其它的概念。
很多法式中都利用了正则表达式,包含xsh,egrep,sed,vi和在UNIX平台下的法式。它们可以被良多言语采用,如HTML 和XML,这些采用凡是只是全部尺度的一个子集。
比你想象的还要通俗
跟着正则表达式移植到穿插平台的法式言语的开展,这的功效也日趋完全,利用也逐步普遍。收集上的搜刮引擎利用它,e-mail法式也利用它,即便你不是一个UNIX法式员,你也能够利用划定规矩言语来简化你的法式而延长你的开辟工夫。
正则表达式101
良多正则表达式的语法看起来很类似,这是由于你之前你没有研讨过它们。通配符是RE的一个布局类型,即反复操作。让咱们先看一看ERE尺度的最通用的根基语法类型。为了可以供应具有特定用处的典范,我将利用几个分歧的法式。
字符婚配
正则表达式的关头的地方在于肯定你要搜刮婚配的器材,假如没有这一概念,Res将毫无用途。
每个表达式都包括需求查找的指令,如表A所示。
Table A: Character-matching regular expressions
操作
注释
例子
了局
.
Match any one character
grep .ord sample.txt
Will match “ford”, “lord”, “2ord”, etc. in the file sample.txt.
[ ]
Match any one character listed between the brackets
grep [cng]ord sample.txt
Will match only “cord”, “nord”, and “gord”
[^ ]
Match any one character not listed between the brackets
grep [^cn]ord sample.txt
Will match “lord”, “2ord”, etc. but not “cord” or “nord”
grep [a-zA-Z]ord sample.txt
Will match “aord”, “bord”, “Aord”, “Bord”, etc.
grep [^0-9]ord sample.txt
Will match “Aord”, “aord”, etc. but not “2ord”, etc.
反复操作符
反复操作符,或数目词,都描写了查找一个特定字符的次数。它们常被用于字符婚配语法以查找多行的字符,可拜见表B。
Table B: Regular expression repetition operators
操作
注释
例子
了局
?
Match any character one time, if it exists
egrep “?erd” sample.txt
Will match “berd”, “herd”, etc. and “erd”
*
Match declared element multiple times, if it exists
egrep “n.*rd” sample.txt
Will match “nerd”, “nrd”, “neard”, etc.
+
Match declared element one or more times
egrep “[n]+erd” sample.txt
Will match “nerd”, “nnerd”, etc., but not “erd”
{n}
Match declared element exactly n times
egrep “[a-z]{2}erd” sample.txt
Will match “cherd”, “blerd”, etc. but not “nerd”, “erd”, “buzzerd”, etc.
{n,}
Match declared element at least n times
egrep “.{2,}erd” sample.txt
Will match “cherd” and “buzzerd”, but not “nerd”
{n,N}
Match declared element at least n times, but not more than N times
egrep “n[e]{1,2}rd” sample.txt
Will match “nerd” and “neerd”
锚
锚是指它所要婚配的格局,如图C所示。利用它能便利你查找通用字符的兼并。例如,我用vi行编纂器号令:s来代表substitute,这一号令的根基语法是:
s/pattern_to_match/pattern_to_substitute/
Table C: Regular expression anchors
操作
注释
例子
了局
^
Match at the beginning of a line
s/^/blah /
Inserts “blah “ at the beginning of the line
$
Match at the end of a line
s/$/ blah/
Inserts “ blah” at the end of the line
\<
Match at the beginning of a word
s/\</blah/
Inserts “blah” at the beginning of the word
egrep “\<blah” sample.txt
Matches “blahfield”, etc.
\>
Match at the end of a word
s/\>/blah/
Inserts “blah” at the end of the word
egrep “\>blah” sample.txt
Matches “soupblah”, etc.
\b
Match at the beginning or end of a word
egrep “\bblah” sample.txt
Matches “blahcake” and “countblah”
\B
Match in the middle of a word
egrep “\Bblah” sample.txt
Matches “sublahper”, etc.
距离
Res中的另外一可便的地方是距离(或拔出)符号。实践上,这一符号相当于一个OR语句并代表|符号。上面的语句前往文件sample.txt中的“nerd” 和 “merd”的句柄:
egrep “(n|m)erd” sample.txt
距离功效十分壮大,出格是当你寻觅文件分歧拼写的时分,但你可以鄙人面的例子失掉不异的了局:
egrep “[nm]erd” sample.txt
当你利用距离功效与Res的初级特征毗连在一同时,它的真正用途更能表现出来。
一些保存字符
Res的最初一个最主要特征是保存字符(也称特定字符)。例如,假如你想要查找“ne*rd”和“ni*rd”的字符,格局婚配语句“n[ei]*rd”与“neeeeerd” 和 “nieieierd”符合合,但并非你要查找的字符。由于‘*’(星号)是个保存字符,你必需用一个反斜线符号来替换它,即:“n[ei]\*rd”。其它的保存字符包含:
^ (carat)
. (period)
[ (left bracket}
$ (dollar sign)
( (left parenthesis)
) (right parenthesis)
| (pipe)
* (asterisk)
+ (plus symbol)
? (question mark)
{ (left curly bracket, or left brace)
\ backslash
一旦你把以上这些字符包含在你的字符搜刮中,毫无疑问Res变得十分的难读。好比说以下的PHP中的eregi搜刮引擎代码就很难读了。
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$sendto)
你可以看到,法式的意图很难掌控。但假如你抛开保存字符,你经常会毛病地舆解代码的意思。
总结
在本文中,咱们揭开了正则表达式的奥秘面纱,并列出了ERE尺度的通用语法。假如你想阅览Open Group组织的划定规矩的完全描写,你可以拜见:Regular Expressions,接待你在个中的会商区宣布你的成绩或概念。
建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。
作者:
蒙在股里
时间:
2015-2-4 11:56
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者:
因胸联盟
时间:
2015-2-5 00:33
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者:
谁可相欹
时间:
2015-2-6 17:03
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者:
乐观
时间:
2015-2-8 01:57
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者:
小妖女
时间:
2015-2-9 01:22
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者:
小女巫
时间:
2015-2-11 08:47
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者:
变相怪杰
时间:
2015-3-1 12:00
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者:
透明
时间:
2015-3-2 02:47
实践是检验自己会不会的真理。
作者:
莫相离
时间:
2015-3-8 10:53
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
作者:
飘飘悠悠
时间:
2015-3-15 22:05
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者:
飘灵儿
时间:
2015-3-17 12:08
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者:
简单生活
时间:
2015-3-21 13:09
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者:
只想知道
时间:
2015-3-31 04:20
Ps:以上纯属原创,如有雷同,纯属巧合
作者:
柔情似水
时间:
2015-4-11 06:47
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年 具体的记不清啦,囧。
作者:
若天明
时间:
2015-4-15 23:32
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者:
仓酷云
时间:
2015-5-4 10:57
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者:
金色的骷髅
时间:
2015-5-5 21:10
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者:
小魔女
时间:
2015-5-9 09:48
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2