当前位置: 移动技术网 > IT编程>开发语言>PHP > 字符串和正则表达式(8)

字符串和正则表达式(8)

2018年04月11日  | 移动技术网IT编程  | 我要评论

炮艇坠落第一条线索,安装win7系统,呼唤我 曾昱嘉

正则表达式

在PHP中有两套正则表达式函数库。

PCRE库(Perl Compatible Regular Expression),基于传统型NFA。PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配

POSIX扩展库(Portable Operation System interface),基于POSIX NFA。POSIX扩展的正则表达式由POSIX 1003.2定义

一般而言,实现相同的功能,使用PCRE库的效率略占优势

  • 中括号

[0-9]匹配任何从0到9的十进制数

[a-z]匹配任何小写从a到z的字符

[A-Z]匹配任何大小从A到Z的字符

[A-Za-z]匹配任何大写A到小写z的字符

$name = "256";
if(preg_match("([2-9])",$name)){//匹配包含2到9的字符串
    echo "true";
}
  • 量词

p+。匹配任何至少包含一个字符p的字符串

p*。匹配任何包含零个或多个字符p的字符串

p?。匹配任何包含零个或一个字符p的字符串

p{2}。匹配任何包含两个连续p的字符串

p{2,3}。匹配任何包含两个或三个连续p的字符串

p{2,}。匹配任何包含两个或以上p的字符串

p$。匹配任何以p结尾的字符串

^p。匹配任何以p开头的字符串

[^0-9]。匹配任何不包含0到9的十进制数

p.p。匹配任何包含p和p之间的字符串

^.{2}$。匹配任何只包含两个字符的字符串

<b>(.*)</b>。匹配任何被<b></b>包围的字符串

p(hp)*。匹配任何包含一个p,p后面是hp的字符串

$name = "pass";
if(preg_match("/p+/",$name)){//匹配至少包含一个p的字符串
    echo "true";
}
  • 预定义字符范围(字符类)

[:digit:]数字[0~9]

[:lower:]小写字母[a~z]

[:upper:]大写字母[A~Z]

[:alpha:]大小写字母[A~Za~z]

[:alnum:]大小写字母以及数字[A~Za~z0~9]

[:xdigit:]十六进制字符[A~Fa~f0~9]

[:graph:]33~126范围的可打印ASCII字符

[:cntrl:]控制字符,如制表符、退格符或反斜杠

[:space:]空白字符:空格、水平制表符、垂直制表符、换行、换页或换行

[:punct:]标点符号

$name = "1314";
if(preg_match("([[:digit:]])",$name)){//匹配数字
    echo "true";
}
  • 修饰符

i不区分大小写

g查找所有出现

m将字符串视为多行

s将字符串视为一行

x忽略正则表达式中的空格和注释

$name = "xiukang";
if(preg_match("/XIU/i",$name)){//添加i不区分大小写
    echo "true";
}
  • 元字符

\A 只匹配字符串开头

\b 匹配单词边界

\B 匹配除单词边界之外的任何字符

\d 匹配数字字符

\D 匹配非数字字符

\s 匹配空白字符

\S 匹配非空白字符

[] 包围一个字符类

() 包围一个字符分组或定义一个反引用

$ 匹配行尾

^ 匹配行首

. 匹配除换行之外的任何字符

\ 引出下一个元字符

\w 匹配任何只包含数字字母和下划线的字符串

\W 忽略下划线、数字和字母

$name = "xiukang";
if(preg_match("/g\$/",$name)){//匹配以g结尾的字符串
    echo "true";
}
  • PHP的正则表达式函数

 ·搜索模式

preg_match()函数

//如果匹配的字符串全部为小写字母则返回false
$name = "xiukang";
if(preg_match("([^[:lower:]])",$name)){
    echo "true";
}else {
    echo "false";
}

preg_match()函数的第三个参数的作用,将字符串划分成二维数组

$xiu = '/(www)(.)(baidu)(.)(com)/';
$kang = 'www.baidu.com';
preg_match_all($xiu,$kang,$match);
echo $match[0][0];//www.baidu.com
echo $match[1][0];//www
echo $match[2][0];//.
echo $match[3][0];//baidu
echo $match[4][0];//.
echo $match[5][0];//com

·搜索数组

preg_grep()函数

$xiu = '/[0-9]/';//匹配包含1到9的字符串
$kang = array('123','456','abc','13ab','789');
$arr = preg_grep($xiu,$kang);
print_r($arr);//Array ( [0] => 123 [1] => 456 [3] => 13ab [4] => 789 ) 

preg_grep()函数的第三个参数

$xiu = '/[0-9]/';//匹配包含1到9的字符串
$kang = array('123','456','abc','ab','789');
$arr = preg_grep($xiu,$kang,true);//true表示返回正则表达式未匹配的元素
print_r($arr);//Array ( [2] => abc [3] => ab ) 

·替换匹配模式的所有字符串

preg_replace()函数

$name = "xiukang 1997";
//将匹配的字符串替换为2018
$kang= preg_replace("([0-9]+)","2018", $name);
print $kang;//xiukang 2018

·匹配所有出现的模式

preg_match_all()函数

(。。。)

·界定特殊的正则表达式字符

preg_quote()函数

在特殊含义的字符前插入一个反斜杠

特殊字符:$ ^ * () + = {} [] | \\ : <>

$name = "$500";
echo preg_quote($name);//返回"\$500"
echo $name;//返回"$500"

·创建定制的替换函数

preg_relpace_callback()函数

// 将文本中的年份增加一年
$name = "xiu kang 2018"; function setName($sear){ //通常: $sear[0]是完成的匹配,$sear[1]是第一个捕获子组的匹配,以此类推 return $sear[1].($sear[2]+1); } echo preg_replace_callback("|(\D)(\d{4})|","setName",$name);//输出"xiu kang 2019 "

·以不区分大小写的方式将字符串划分为不同元素

preg_split()函数

$xiu = "xiu++kang+++++sear";
$kang = preg_split("/\++/",$xiu);
foreach($kang as $sear){
    echo "$sear<br/>";//输出"xiu kang sear"
}

其他的字符串函数

  • 确定字符串长度

 strlen()函数

$pass = "2435325";
if(strlen($pass)>10){
    echo "成功";
}else {
    echo "密码长度必须大于十位数";
}
  • 比较两个字符串

·不区分大小写比较两个字符串

strcasecmp()函数

strcasecmp()函数将两个字符串转换为二进制,然后相减(不区分大小写)

$email1 = "admin@xiu.com";
$email2 = "ADMIN@xiu.com";
echo strcasecmp($email1,$email2);//返回0

·区分大小写比较两个字符串

strcmp()函数

strcmp()函数将两个字符串转换为二进制,然后比较大小

$text1 = $text2 返回0

$text1 < $text2 返回-1

$text1 > $text2 返回1

$text1 = "修";
$text2 = "抗";
echo strcmp($text1,$text2);//返回-1
  • 处理字符串大小写

非字母字符不受影响

 ·将字符串全部转换为小写

strtolower()函数

$text = "XIU";
echo strtolower($text);//返回"xiu"

·将字符串全部转换为大写

strtoupper()函数

$text = "xiu";
echo strtoupper($text);//返回"XIU"

·将字符串的首字母转换为大写

ucfirst()函数

$text = "xiu";
echo ucfirst($text);//返回"Xiu"

·将字符串的每个单词的首字母转换为大写

ucwords()函数

$text = "xiu kang";
echo ucwords($text);//返回"Xiu Kang"

 

正则表达式函数的代替函数

·根据预定义的字符对字符串进行语法分析

strtok()函数

$name = "www.baidu/com";
$tokens = "./";//设置两个定界符(. /)
$tokName = strtok($name,$tokens);
while($tokName){
    echo "$tokName<br/>";//输出"www baidu com"
    $tokName = strtok($tokens);//在后期调用时,不在包含第一个参数
}

·获取字符串最后出现的位置

strrpos()函数

echo strrpos("H e l l o w","l");//返回6

·获取字符串的一部分

strstr()函数

$name = "xiukang@qq.com";
echo strstr($name,"@");//@qq.com 

·替换字符串

str_replace()函数

str_ireplace()函数(不区分大小写)

$name = "xiukang@qq.com";
echo str_replace("@","*",$name);//xiukang*qq.com 

·获取字符串中的指定字符

subste()函数

$name = "Hellow";
echo substr($name,1,-2);//ell 

·获取字符串中指定字符出现的次数

$name = "Hellow";
echo substr_count($name,"l");//返回2

·将数组转换为字符串

implode()函数

$arr = array("xiu","kang","sear");
echo implode("|",$arr);//输出"xiu|kang|sear"
  • 填充和替换字符串

·删除字符串开始的字符

ltrim()函数

echo ltrim("Hellow","H");//ellow 

·删除字符串末尾的字符

rtrim()函数

echo rtrim("Hellow","w");//Hello

·删除字符串两端的字符

trim()函数

echo trim("Hellow","wH");//ello

填充字符串

str_pad()函数

echo str_pad("xiu",5,"*")."kang";//输出"xiu**kang"

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网