PHP字符串操作-正则表达式和替换函数
******代码参考于"PHP与MySQL程序设计"一书
一般字符串的验证或多或少都会用到正则表达式。PHP对正则表达式的支持相当丰富,有POSIX和PEAR两种格式的正则表达式语法支持。
下面就PEAR格式的常用正则表达式进行一些实例展示。
用到3个PEAR格式的正则表达式验证函数:preg_match---匹配函数preg_replace---替换函数,preg_split---分割函数
1.preg_match:
看一个最简单的例子:';?>PEAR格式的正则表达式:/表示界定符,一般用在表达式开始和结尾处。/pizza/就表示包含pizza的任意字符串。下面是验证形如****@****.com/cn/org的邮箱格式。
^放在表达式开头表示以后面字符开头
而[^0-9]表示不包含0-9
[a-zA-Z0-9_]表示包含小写、大写字母以及数字和下划线的字符。
*表示任意个前面的字符。
[.]表示包含有.
而[.*]或者(.*)表示匹配任意字符(除换行符)
下面的正则表达式含义是:匹配不是数字开头的并且以若干个字母(大小写)开头同时有数字或者下划线组合的字符串加上@加上若干大小写字母和数字的组合加上.加上2-4个大小写字母的组合。";}?>以上2个例子输出:
2.preg_replace:
下面的例子把匹配有http://****/的字符串输出为HTML中的链接。正则表达式中的/需要进行转义即\/\/表示//
preg_replace参数:第一个是正则表达式,第二个参数是替换的字符串,使用${0}来指定所有匹配的字符串。${n}表示第n个被匹配的字符串(n>0)。第三个参数就是需要替换的变量。${0}',$website);echo"";?>结果:
3:preg_split:
第一个参数是需要匹配的正则表达式,第二个是需要操作的变量。
下面的例子匹配逗号","然后把字符串按照逗号进行划分。划分后保存在$result数组中。最后遍历数组输出。";}?>PHP还提供了一些正则表达式的替换函数,这些函数使用起来都很方便,可以在需要效率或者匹配不是很复杂的情况下使用.
1.字符串长度匹配:strlen$password='passwordifdefined';if(strlen($password)';2.字符串比较匹配,strcmp即stringcompare,传入2个字符串变量,如果完全一样,返回0,否则返回1if(strcmp($password,'randompassword')!=0)echo'passworddoesn\'tmatch';elseecho'passwordmatches!';echo'';结果:passworddoesn'tmatch
3.字符串包含匹配:strspn($s1,$s2)如果$s2中完全包含有$s1的字符,那么返回$s1的长度。下面的例子验证一个变量是否全是由数字构成:$passwordNum="3412512";if(strspn($passwordNum,"1234567890")==strlen($passwordNum))echo'passwordcan\'tonlyconsistofnumbers!';echo'';结果:passwordcan'tonlyconsistofnumbers.
4.搜索指定字符串出现的位置:strpos($s1,$s2)在$s1中搜寻含有$s2的字符串,返回第一次出现的位置。
下面的例子利用substr得到index第一次出现的位置到$file结尾之间的字符串。$file='/home/websites/index.html';$pos=strpos($file,'index');echosubstr($file,$pos,strlen($file));echo"";5.得到指定字符串出现的频率。substr_count
下面的例子得到在$article中love和you出现的次数。这个技巧可以实现一些网站的搜索统计功能。$keywords=array('love','you');$article='.$keyword.'appears'.substr_count($article,$keyword).'times'."";}6.去除字符串的首尾字符。
下面的例子去除字符串的首尾空格。$text='textwithspaces';echotrim($text,'');7.字符串替代:substr_replace($s1,$s2,$start,$length)用$s2替换$s1,替换的部分从$start开始,长度为$length
下面的例子是把手机号码中间的部分替换成*,可以用在一些幸运抽奖的应用中。$phoneNumber='13978787878';echosubstr_replace($phoneNumber,'*****',3,5);结果:139*****878
好了,就这些。