PHP第三章 字符串与正则表达式

了解字符串

字符串类型

  • 数字类型
  • 字母类型
  • 特殊类型,如$,%,^,&等
  • 不可见字符,如\t(Tab字符),\n(换行符),\r(回车符)等。

单引号与双引号

双引号中的内容是经过PHP的语法分析器解析过的,任何变量在双引号中都会被转换为它的值进行输出显示;而单引号的内容是“所见即所得”的,无论有无变量,都会当成普通字符串进行原样输出。

定界符

定界符用于定义格式化的大文本,格式化是指文本中的格式将被保留,所以文本中不需要使用转义字符。在使用时后接一个标识符,然后是格式化文本(即字符串),最后是同样的标识符结束字符串。

格式如下:

<<<str
    格式化文本
str;

注意:在定界符内不允许添加注释,否则程序将运行出错。结束标识符所在的行不能包含任何其他字符,而且不能被缩进,在标识符分号前后不能有任何空白字符或制表符

连接字符串

1.字符串可以用“.”(点)字符串连接符连接,它可以把两个或者两个以上的字符串连接成一个新的字符串。

2.字符串连接有两种形式,第一种是连接运算符“.”;第二种是连接赋值运算符“.=”

转义,还原字符串

手动转义,还原字符串

1.“\”是一个转义符,紧跟在“\”后面的第一个字符将变为没有意义或特殊意义。

2.如果要在字符串中表示单引号,则需要用反斜杠“\”进行转义,例如,要表示字符串“I’m”,则需要写成“I\’m”。

自动转义,还原字符串

应用PHP提供的addslashes()函数和stripslashes()函数实现。

1.addslashes()函数

addslashes()函数用来给字符串str加入反斜杠(\),对指定字符串中的字符进行转义,该函数可以转义的字符包括单引号(‘),双引号(”),反斜杠(\),NULL字符(0)。

语法:

string addslashes(string str);

参数str为将要被操作的字符串

2.stripslashes()函数

stripslashes()函数用来将应用addslashes()函数转义后的字符串srt返回原样。

语法:

string stripslashes(string str);

3.addcslashes()函数

实现对指定字符串中的字符进行转义,即在指定的字符charlist前加上反斜杠(\)。通过该函数可以将要添加到数据库中的字符串进行转义,从而避免出现乱码等问题。

语法:

string addcslashes(string str,string charlist)

4.stripcslashes()函数

stripcslashes()函数用来将应用addcslashes()函数转义的字符串str还原。

语法:

string stripcslashes(string str);

获取字符串长度

1.主要通过strlen()函数实现。

2.语法:

int strlen(string str)

注意:汉字占两个字符,数字,英文,小数点,下划线和空格各占一个字符。

3.strlen()函数在获取字符串长度的同时,也可以用来检测字符串的长度。

截取字符串

1.substr()函数从字符串中按照指定的位置截取一定长度的字符。

2.语法:

string substr(string str,int start[,int length])

3.参数说明:

4.注意:本函数中的参数start的指定位置是从0开始计算的,即字符串中的第一个字符表示为0.

例:

<?php
echo substr("www,baidu.com",0);  //从第0个字符开始截取
echo substr("www,baidu.com",3,8);  //从第3个字符开始连续截取8个字符
echo substr("www,baidu.com",-3,3);  //从倒数第3个字符开始截取3个字符。
echo"<br>";
echo substr("www.baidu.com",0,-2)  //从第一个字符开始截取,截取到倒数第2个字符
?>

比较字符串

按字节比较

1.使用strcmp()函数和strcasecmp()函数进行比较。区别是strcmp()函数区分字符的大小写,而strcasecmp()函数不区分字符的大小写。

2.语法:

int strcmp(string str1,string str2);

如果相等返回0,如果前者大于后者,返回1.如果前者小于后者,则返回-1。

按自然排序法比较

1.按照自然排序法进行字符串比较是通过strnatcmp()函数来实现的。自然排序法比较的是字符串中的数字部分,将字符串中的数字按照大小进行比较。

2.语法:

int strnatcmp(string str1,string str2);

如果相等返回0,如果前者大于后者,返回1.如果前者小于后者,则返回-1。本函数区分字母大小写。

3.按照自然排序法进行比较,还可以使用另一个与strnatcmp()函数相同,但是不区分大小写的strnatcasecmp()函数。

指定从源字符串的位置比较

1.strncmp()函数用来比较字符串中的前n个字符。

2.语法:

int strncmp(string str1,string str2,int len);

如果相等返回0,如果前者大于后者,返回1.如果前者小于后者,则返回-1。本函数区分字母大小写。

3.

检索字符串

使用strstr()函数检索指定的关键字

1.获取一个指定字符串在另一个字符串中首次出现的位置到后者末尾的子字符串。成功返回子字符串(存在相匹配的字符),失败返回false;

2.语法:

string strstr(string haystask,string needle)

3.参数说明

  • haystack:必选参数,用来指定从哪个字符串进行搜索。

  • needle:必选参数,用来指定搜索的对象,如果该参数是一个数值,那么将搜索与这个数值的ASCII值相匹配的字符。

4.strchr()函数与其相反,该函数是从字符串后序的位置开始检索子串的。

应用substr_count()函数检索子串出现的次数。

1.substr_count()函数获取指定字符在字符串中出现的次数。

2.语法:

int substr_count(string haystask,string needle)

参数haystask是指定的字符串,参数needle是指定的字符。

替换字符串

1.str_ireplace()函数

使用新的字符串替换原始字符串中被指定要替换的字符串

  • 语法:

    mixed str_irereplace(mixed search,mixed repalce,mixed subject[,int&count])

  • 参数说明

  • 该函数在执行替换的操作时不区分大小写,如果需要对大小写加以区别,可以使用str_replace()函数。

2.substr_replace()函数

对指定字符串中的部分字符串进行替换

  • 语法:

    mixed substr_replace(string str,string repl,int start,[,int length])

  • 参数说明

  • 如果参数strat设置为负数,而参数length数值小于或等于start数值,那么length的值自动为0.

什么是正则表达式

正则表达式是一种描述字符串结构的语法规则,是一个特定的格式化模式。它可以匹配,替换,截取匹配字符串。

  • grep:用来显示文件中的特定的内容。
  • egrep:“扩展的grep”。
  • POSIX:可移植操作系统接口。
  • Prel:实际抽取与汇报语言。
  • PCRE: 这是兼容Perl正则表达式的一套正则引擎。

正则表达式语法规则

正则表达式是由两部分构成:元字符和文本字符。

行定位符(^和$)

行定位符用于描述字符的边界。“^”表示行的开始;“$”表示行的结尾。

mingri$

这可以匹配以mingri结尾的字符,而不能匹配mingri开头的字符。

字符类([])

正则表达式是区分大小写的,如果想忽略大小写,可以通过方括号([])表达式来完成

#####4.12.3 选择字符(|)
1.要忽略字串的大小写,还可以通过选择字符(|)来完成

2.使用“[]”和使用“|”的区别在于:“[]”只能匹配单个字符,而“|”可以匹配任意长度的字串。

连字符(-)

连字符可以表示字符的范围

[a-zA-Z_]

排除字符([^])

匹配不符合命名规则的变量。正则表达式提供;额“^”字符

[^a-zA-Z_]

该表达式匹配的是不以字母和下划线开头的变量名。

限定符(?*+{n,m})

点字符(.)

在正则表达式中通过点字符“.”可以匹配除换行符外的任意一个字符。

反斜杠(\)

反斜杠可以将一些不可打印的字符显示出来

还可以指定预定义字符集

反斜杠还有一种功能,就是定义断言

反向引用

反向引用,就是依靠子表达式的“记忆”功能来匹配连续出现的字串或字母。

POSIX扩展正则表达式函数

替换字符串

函数格式:

string ereg_replace/eregi_replace(string pattern,string replacement,string string)

函数功能:在字符串string中匹配表达式pattern。如果匹配成功,则使用replacement来替换匹配字串,并返回替换后的string。如果未在string中找打匹配项,则string将原样返回。

  • ereg_replace不区分大小写

分隔字符串

函数格式:

array split/spliti(string pattern,string string[,int limit]);

函数功能:使用表达式pattern来分割字符串string。如果有参数limit,那么数组最多有limit个元素,剩余部分都写到最后一个数组元素中。如果函数错误,则返回false。split()函数区分大小写,而spliti()函数不区分大小写。

PCRE兼容正则表达式函数

查找字符串

函数格式:

int preg_match/preg_match_all(string pattern,string subject[,array matches])

函数功能:在字符串subject中匹配表达式pattern。函数返回匹配的次数。如果有数组matches,那么每次匹配的结果将被存储到数组matches中。

替换字符串

函数语法:
mixed preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit])

函数功能:该函数在字符串subject中匹配表达式pattern,并将匹配项替换成字串replacement。如果有参数limit,则替换limit次。

-------------本文结束感谢您的阅读-------------