仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1323|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网站制作之揭开正则表达式语法的奥秘面纱

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。语法|正则   正则表达式(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:54 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
因胸联盟 该用户已被删除
板凳
发表于 2015-2-5 00:33:46 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
谁可相欹 该用户已被删除
地板
发表于 2015-2-6 17:03:26 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
乐观 该用户已被删除
5#
发表于 2015-2-8 01:57:04 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
小妖女 该用户已被删除
6#
发表于 2015-2-9 01:22:39 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
小女巫 该用户已被删除
7#
发表于 2015-2-11 08:47:27 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
变相怪杰 该用户已被删除
8#
 楼主| 发表于 2015-3-1 12:00:27 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
透明 该用户已被删除
9#
发表于 2015-3-2 02:47:32 | 只看该作者
实践是检验自己会不会的真理。
莫相离 该用户已被删除
10#
发表于 2015-3-8 10:53:54 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
飘飘悠悠 该用户已被删除
11#
发表于 2015-3-15 22:05:25 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
飘灵儿 该用户已被删除
12#
发表于 2015-3-17 12:08:21 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
简单生活 该用户已被删除
13#
发表于 2015-3-21 13:09:01 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
只想知道 该用户已被删除
14#
发表于 2015-3-31 04:20:24 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
柔情似水 该用户已被删除
15#
发表于 2015-4-11 06:47:31 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
若天明 该用户已被删除
16#
发表于 2015-4-15 23:32:10 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
17#
发表于 2015-5-4 10:57:32 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
金色的骷髅 该用户已被删除
18#
发表于 2015-5-5 21:10:20 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
小魔女 该用户已被删除
19#
发表于 2015-5-9 09:48:58 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 07:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表