仓酷云
标题:
PHP网站制作之正则表达式利用详解
[打印本页]
作者:
金色的骷髅
时间:
2015-2-4 00:20
标题:
PHP网站制作之正则表达式利用详解
给你的建议是,有些最常用的语句是需要记住的 比如if for while这些、其他的一般语句你只要知道有这个函数或者有这个功能就可以了,当你用的时候你可以凭借记忆搜索就可以了。详解|正则 假如咱们问那些UNIX体系的喜好者他们最喜好甚么,谜底除不乱的体系和可以近程启动以外,十有八九的人会提到正则表达式;假如咱们再问他们最头痛的是甚么,能够除庞杂的历程掌握和装置进程以外,还会是正则表达式。那末正则表达式究竟是甚么?若何才干真实的把握正则表达式并准确的加以天真应用?本文迁就此睁开引见,但愿可以对那些巴望懂得和把握正则表达式的读者有所助益。
入门简介
复杂的说,正则表达式是一种可以用于形式婚配和交换的强无力的东西。咱们可以在几近一切的基于UNIX体系的东西中找到正则表达式的身影,例如,vi编纂器,Perl或PHP剧本言语,和awk或sed shell法式等。另外,象JavaScript这类客户真个剧本言语也供应了对正则表达式的撑持。因而可知,正则表达式已超越了某种言语或某个体系的局限,成为人们广为承受的概念和功效。
正则表达式可让用户经由过程利用一系列的特别字符构建婚配形式,然后把婚配形式与数据文件、法式输出和WEB页面的表单输出等方针对象停止对照,依据对照对象中是不是包括婚配形式,履行响应的法式。
举例来讲,正则表达式的一个最为广泛的使用就是用于验证用户在线输出的邮件地址的格局是不是准确。假如经由过程正则表达式验证用户邮件地址的格局准确,用户所填写的表单信息将会被正常处置;反之,假如用户输出的邮件地址与正则表达的形式不婚配,将会弹出提醒信息,请求用户从头输出准确的邮件地址。因而可知正则表达式在WEB使用的逻辑判别中具有无足轻重的感化。
根基语法
在对正则表达式的功效和感化有了初步的懂得以后,咱们就来详细看一下正则表达式的语法格局。
正则表达式的模式普通以下:
/love/
个中位于“/”定界符之间的局部就是将要在方针对象中停止婚配的形式。用户只需把但愿查找婚配对象的形式内容放入“/”定界符之间便可。为了可以利用户加倍天真的定制形式内容,正则表达式供应了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特别意义的公用字符,可以用来划定其前导字符(即位于元字符后面的字符)在方针对象中的呈现形式。
较为经常使用的元字符包含: “+”, “*”,和 “?”。个中,“+”元字符划定其前导字符必需在方针对象中一连呈现一次或屡次,“*”元字符划定其前导字符必需在方针对象中呈现零次或一连屡次,而“?”元字符划定其前导对象必需在方针对象中一连呈现零次或一次。
上面,就让咱们来看一下正则表达式元字符的详细使用。
/fo+/
由于上述正则表达式中包括“+”元字符,暗示可以与方针对象中的 “fool”, “fo”, 或 “football”等在字母f前面一连呈现一个或多个字母o的字符串相婚配。
/eg*/
由于上述正则表达式中包括“*”元字符,暗示可以与方针对象中的 “easy”, “ego”, 或 “egg”等在字母e前面一连呈现零个或多个字母g的字符串相婚配。
/Wil?/
由于上述正则表达式中包括“?”元字符,暗示可以与方针对象中的 “Win”, 或 “Wilson”,等在字母i前面一连呈现零个或一个字母l的字符串相婚配。
除元字符以外,用户还可以准确指定形式在婚配对象中呈现的频率。例如,
/jim{2,6}/
上述正则表达式划定字符m可以在婚配对象中一连呈现2-6次,因而,上述正则表达式可以同jimmy或jimmmmmy等字符串相婚配。
在对若何利用正则表达式有了初步懂得以后,咱们来看一下其它几个主要的元字符的利用体例。
\s:用于婚配单个空格符,包含tab键和换行符;
\S:用于婚配除单个空格符以外的一切字符;
\d:用于婚配从0到9的数字;
\w:用于婚配字母,数字或下划线字符;
\W:用于婚配一切与\w不婚配的字符;
. :用于婚配除换行符以外的一切字符。
(申明:咱们可以把\s和\S和\w和\W看做互为逆运算)
上面,咱们就经由过程实例看一下若何在正则表达式中利用上述元字符。
/\s+/
上述正则表达式可以用于婚配方针对象中的一个或多个空格字符。
/\d000/
假如咱们手中有一份庞杂的财政报表,那末咱们可以经由过程上述正则表达式垂手可得的查找到一切总额达千元的款子。
除咱们以上所引见的元字符以外,正则表达式中还具有别的一种较为共同的公用字符,即定位符。定位符用于划定婚配形式在方针对象中的呈现地位。
较为经常使用的定位符包含: “^”, “$”, “\b” 和 “\B”。个中,“^”定位符划定婚配形式必需呈现在方针字符串的开首,“$”定位符划定婚配形式必需呈现在方针对象的开头,\b定位符划定婚配形式必需呈现在方针字符串的开首或开头的两个界限之一,而“\B”定位符则划定婚配对象必需位于方针字符串的开首和开头两个界限以内,即婚配对象既不克不及作为方针字符串的开首,也不克不及作为方针字符串的开头。一样,咱们也能够把“^”和“$”和“\b”和“\B”看做是互为逆运算的两组定位符。举例来讲:
/^hell/
由于上述正则表达式中包括“^”定位符,所以可以与方针对象中以 “hell”, “hello”或 “hellhound”开首的字符串相婚配。
/ar$/
由于上述正则表达式中包括“$”定位符,所以可以与方针对象中以 “car”, “bar”或 “ar” 开头的字符串相婚配。
/\bbom/
由于上述正则表达式形式以“\b”定位符开首,所以可以与方针对象中以 “bomb”, 或 “bom”开首的字符串相婚配。
/man\b/
由于上述正则表达式形式以“\b”定位符开头,所以可以与方针对象中以 “human”, “woman”或 “man”开头的字符串相婚配。
为了可以便利用户加倍天真的设定婚配形式,正则表达式答应利用者在婚配形式中指定某一个局限而不局限于详细的字符。例如:
/[A-Z]/
上述正则表达式将会与从A到Z局限内任何一个大写字母相婚配。
/[a-z]/
上述正则表达式将会与从a到z局限内任何一个小写字母相婚配。
/[0-9]/
上述正则表达式将会与从0到9局限内任何一个数字相婚配。
/([a-z][A-Z][0-9])+/
上述正则表达式将会与任何由字母和数字构成的字符串,如 “aB0” 等相婚配。这里需求提示用户注重的一点就是可以在正则表达式中利用 “()” 把字符串组合在一同。“()”符号包括的内容必需同时呈现在方针对象中。因而,上述正则表达式将没法与诸如 “abc”等的字符串婚配,由于“abc”中的最初一个字符为字母而非数字。
假如咱们但愿在正则表达式中完成相似编程逻辑中的“或”运算,在多个分歧的形式中任选一个停止婚配的话,可使用管道符 “|”。例如:
/to|too|2/
上述正则表达式将会与方针对象中的 “to”, “too”, 或 “2” 相婚配。
正则表达式中还有一个较为经常使用的运算符,即否认符 “[^]”。与咱们前文所引见的定位符 “^” 分歧,否认符 “[^]”划定方针对象中不克不及存在形式中所划定的字符串。例如:
/[^A-C]/
上述字符串将会与方针对象中除A,B,和C以外的任何字符相婚配。普通来讲,当“^”呈现在 “[]”内时就被视做否认运算符;而当“^”位于“[]”以外,或没有“[]”时,则应该被视做定位符。
最初,当用户需求在正则表达式的形式中到场元字符,并查找其婚配对象时,可使用本义符“\”。例如:
/Th\*/
上述正则表达式将会与方针对象中的“Th*”而非“The”等相婚配。
利用实例
在对正则表达式有了较为周全的懂得以后,咱们就来看一下若何在Perl,PHP,和JavaScript中利用正则表达式。
凡是,Perl中正则表达式的利用格局以下:
operator / regular-expression / string-to-replace / modifiers
运算符一项可所以m或s,分离代表婚配运算和交换运算。
个中,正则表达式一项是将要停止婚配或交换操作的形式,可以由恣意字符,元字符,或定位符等构成。交换字符串一项是利用s运算符时,对查找到的形式婚配对象停止交换的字符串。最初的参数项用来掌握分歧的婚配或交换体例。例如:
s/geed/good/
将会在方针对象中查找第一个呈现的geed字串,并将其交换为good。假如咱们但愿在方针对象的全局局限内履行屡次查找―交换操作的话,可使用参数 “g”,即s/love/lust/g。
另外,假如咱们不需求限制婚配的巨细写模式的话,可使用参数 “i ”。例如,
m/JewEL/i
上述正则表达式将会与方针对象中的jewel,Jewel,或JEWEL相婚配。
在Perl中,利用专门的运算符“=~”指定正则表达式的婚配对象。例如:
$flag =~ s/abc/ABC/
上述正则表达式将会把变量$flag中的字串abc交换为ABC。
上面,咱们就在Perl法式中到场正则表达式,验证用户邮件地址格局的无效性。代码以下:
#!/usr/bin/perl
# get input
print “What's your email address?\n”;
$email = <STDIN>
chomp($email);
# match and display result
if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/)
{
print(“Your email address is correct!\n”);
}
else
{
print(“Please try again!\n”);
}
假如用户更偏心PHP的话,可使用ereg()函数停止形式婚配操作。ereg()函数的利用格局以下:
ereg(pattern, string)
个中,pattern代表正则表达式的形式,而string则是履行查找交换操作的方针对象。一样是验证邮件地址,利用PHP编写的法式代码以下:
<?php
if (ereg(“^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email))
{ echo “Your email address is correct!”;}
else
{ echo “Please try again!”;}
?>
最初,咱们在来看一下JavaScript。JavaScript 1.2中带有一个功效壮大的RegExp()对象,可以用来停止正则表达式的婚配操作。个中的test()办法可以查验方针对象中是不是包括婚配形式,并响应的前往true或false。
咱们可使用JavaScript编写以下剧本,验证用户输出的邮件地址的无效性。
<html>
<head>
<script language="Javascript1.2">
<!-- start hiding
function verifyAddress(obj)
{
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(flag)
{
alert(“Your email address is correct!”);
return true;
}
else
{
alert(“Please try again!”);
return false;
}
}
// stop hiding -->
</script>
</head>
<body>
<form onSubmit="return verifyAddress(this);">
<input name="email" type="text">
<input type="submit">
</form>
</body>
</html>
我先把我自己学习PHP的过程做一下概括:
作者:
若天明
时间:
2015-2-4 11:54
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者:
深爱那片海
时间:
2015-2-5 22:59
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者:
精灵巫婆
时间:
2015-2-12 17:44
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者:
爱飞
时间:
2015-2-24 05:49
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者:
飘灵儿
时间:
2015-3-6 00:09
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者:
简单生活
时间:
2015-3-10 16:01
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者:
admin
时间:
2015-3-11 02:29
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者:
若相依
时间:
2015-3-17 16:23
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
作者:
仓酷云
时间:
2015-3-22 00:00
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者:
海妖
时间:
2015-3-30 11:34
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者:
乐观
时间:
2015-4-5 11:09
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者:
蒙在股里
时间:
2015-4-13 15:25
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者:
小女巫
时间:
2015-4-13 22:42
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者:
第二个灵魂
时间:
2015-4-15 13:31
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者:
变相怪杰
时间:
2015-4-16 04:31
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者:
灵魂腐蚀
时间:
2015-4-16 21:39
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者:
柔情似水
时间:
2015-4-22 08:46
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者:
兰色精灵
时间:
2015-4-28 19:46
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者:
愤怒的大鸟
时间:
2015-5-8 18:33
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者:
莫相离
时间:
2015-5-10 14:39
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年 具体的记不清啦,囧。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2