PHP7语言基础——字符串和正则表达式(上)

字符串的单引号和双引号

字符串是指一连串不中断的字符。这里的字符主要包括以下类型:

  • 字母类型,如常见的a、b、c等。
  • 数字类型,如常见的1、2、3等。
  • 特殊字符类型,如常见的#、%、^、$等
  • 不可见字符类型,如回车符、Tab字符和换行符等。

标识字符串通常使用单引号或双引号,表面看起来没有什么区别。但是,对于存在与字符串中的变量,这两个是不一样的。

  • 双引号内会输出变量的值。单引号内直接显示变量名称。

  • 双引号可以通过“\"转义符输出的特殊字符如下。

    • \n:新一行。
    • \t:Tab。
    • \\:反斜杠。
    • \0:ASCII码的0。
    • \$:把此符号转义为单纯的美元符号,而不再作为声明变量的标识符。
    • \r:回车。
    • \{octal #}:八进制转义
    • \x{hexadecimal #}:十六进制转义。
  • 单引号中可以通过"\"转义符输出的特殊字符只有:

    • \’:转义为单引号本身,而不作为字符串标识符。
    • \\:用于在单引号钱的反斜杠转义为其本身。

【单双引号使用示例】

<?php
$message = "PHP是世界上最好的语言";		// 定义字符串变量
echo "这是关于字符串的程序。<br />";	// 输出字符串
echo "这是一个关于双引号和\$的$message<br />";	// 使用转义字符,双引号中的变量被解析
$message2 = '字符串的程序。';			// 使用单引号赋值字符串变量
echo '这是一个关于字符串的程序。<br />';	// 输出字符串
echo '这是一个关于单引号的$message2';	// 单引号中的变量不被解析
echo $message2;
?>    

以上代码输出如下:

在这里插入图片描述

字符串的连接符

字符串的连接符使用十分常见,这个连接符就是“.”(点),即可以连接两个字符串,也可以连接两个字符串变量,还可以连接字符串和字符串变量。

字符串的基本操作

字符串的基本操作主要包括对字符串的格式化处理、连接切分字符串、比较字符串、字符串子串的对比与处理等。

手动和自动转义字符串中的字符

手动转义:在引号内通过“\”(反斜杠)使一些特殊字符转义为普通字符。

自动转义:通过PHP的内置函数addslashes()完成,还原操作则是通过stripslashes()来完成。

addslashes()函数

(PHP4, PHP5, PHP7)

说明:


addslashes(string $str):string

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。

参数:


str:需要转义的字符。

返回值:


返回转义后的字符。

stripslashes()函数

(PHP4, PHP5, PHP7)

说明:


stripslashes(string $str):string

反引用一个引用字符串。

如果magic_quotes_sybase项开启,反斜线将被去除,但是两个反斜线将会被替换成一个。

参数:


str:输入字符串。

返回值:


返回一个去除转义反斜线后的字符串。

计算字符串的长度

使用strlen()函数可以计算字符串长度。

说明:


strlen(string $string):int

返回给定的字符串string的长度。

参数:


string:需要计算长度的字符串

返回值:


成功则返回字符串string的长度;如果string为空,则返回0。

【字符串长度计算示例】

<?php
// 定义字符串变量
$input = "这个字符串的长度不长。";
$length = strlen($input);	// 获取字符串变量的长度
if (strlen($input) > 50) {
	echo "输入的字符串的长度不能大于50个字符。";
}else{
	echo "允许输入字符串的长度,此字符串长度为$length";
}
?>

以上代码输出为:

在这里插入图片描述

在php中,中文在不同编码下所占字节数不相同,在GBK/GB2312编码下一个中文占2个字节,UTF-8/unicode编码下一个中文占3个字节。

字符串单词统计

使用str_word_count()函数可以实现字符串单词统计功能,但是这个函数只对基于ASCII码的英文档次起作用,并不对UTF8的中文字符起作用。

说明:


str_word_count(string $string[, int $format=0[, string $charlist]]):mixed

统计string 中单词的数量。如果可选的参数format没有被指定,那么返回值是一个代表单词数量的整型数。如果指定了format参数,返回值将是一个数组,数组的内容则取决于format参数。

参数:


string:字符串

format:指定函数的返回值。当前支持的值如下:

  • 0 - 返回单词数量
  • 1 - 返回一个包含string中全部单词的数组
  • 2 - 返回关联数组。数组的键是单词在string中出现的数值位置,数组的值是这个单词

charlist:附加的字符串列表,其中的字符将被视为单词的一部分。

返回值:


返回一个数组或整型数,这取决于format参数的选择。

清理字符串中的空格

清除空格要用到ltrim()rtrim()trim()函数。其中ltrim()是从左边清楚字符串头部的空格,rtrim()是从右边清除字符串尾部的空格,trim()则是从字符串两边同时去除头尾的空格。

ltrim()函数

说明:


ltrim(string $str[, string $character_mask]):string

删除字符串开头的空白字符(或其他字符)并返回

参数:


str:输入的字符串。

character_mask:通过参数character_mask,可以指定想要删除的字符,简单地列出想要删除的字符即可。使用..,可以指定字符的范围。

返回值:


该函数返回一个删除了str最左边的空白字符的字符串。如果不使用第二个参数,ltrim()仅删除一下字符:

  • " "(ASCII 32(0x20)),普通空白字符。
  • “\t”(ASCII 9(0x09)),制表符。
  • “\n”(ASCII 10(0x0A)),换行符。
  • “\r”(ASCII 13(0x0D)),回车符。
  • “\0”(ASCII 0(0x00)),NUL空字节符。
  • “\x0B”(ASCII 11(0x0B)),垂直制表符。

rtrim()函数

说明:


rtrim(string $str[, string $character_mask]):string

该函数删除str末端的空白字符(或者其他字符)并返回。

参数:


str:输入的字符串。

character_mask:通过参数character_mask,可以指定想要删除的字符,简单地列出想要删除的字符即可。使用..,可以指定字符的范围。

返回值:


该函数返回一个删除了str最左边的空白字符的字符串。如果不使用第二个参数,ltrim()仅删除一下字符:

  • " "(ASCII 32(0x20)),普通空白字符。
  • “\t”(ASCII 9(0x09)),制表符。
  • “\n”(ASCII 10(0x0A)),换行符。
  • “\r”(ASCII 13(0x0D)),回车符。
  • “\0”(ASCII 0(0x00)),NUL空字节符。
  • “\x0B”(ASCII 11(0x0B)),垂直制表符。

trim()函数

说明:


trim(string $str[, string $character_mask = "\t\n\r\0\x0B"]):string

此函数返回字符串str去除首位空白字符后的结果。如果不指定第二个参数,trim()将去除这些字符:

  • " "(ASCII 32(0x20)),普通空白字符。
  • “\t”(ASCII 9(0x09)),制表符。
  • “\n”(ASCII 10(0x0A)),换行符。
  • “\r”(ASCII 13(0x0D)),回车符。
  • “\0”(ASCII 0(0x00)),NUL空字节符。
  • “\x0B”(ASCII 11(0x0B)),垂直制表符。

参数:


str:待处理的字符串。

character_mask:可选参数,过滤字符也可由character_mask参数指定。一般要李处所有希望过滤的字符,也可以使用“..”列出一个字符范围。

返回值:


过滤后的字符串。

字符串的切分与组合

字符串的切分使用explode()strtok()函数。切分的反向操作为组合,使用implode()join()函数。

explode()函数

说明:


explode(string $delimiter, string $string [, int $limit]):array

此函数返回由字符串组成的数组,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分隔出来。

参数:


delimiter:边界上的分隔字符。

string:输入的字符串。

limit:如果设置了limit参数并且是整数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分。如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素。如果limit是0,则会被当做1。

返回值:


此函数返回由字符串组成的array,每个元素都是string的一个子串,它们被字符串delimiter作为边界点分隔出来。

如果delimiter为空字符串(""),explode()将返回FALSE。如果delimiter所包含的值在string中找不到,并且使用了负数的limit,那么会返回空的array,否则返回包含string单个元素的数组。

strtok()函数

说明:


strtok(string $str, string $token):string

strtok(string $token):string

strtok()将字符串str分隔为若干子字符串,每个字符串以token中的字符分割。如可以使用空格将"This is an example string"分割成独立的单词。

注意:仅第一次调用strtok函数时使用string参数,后来每次调用strtok,都将只使用token参数,因为它会记住它在字符串string中的位置。如果要重新开始分割一个新的字符串,需要再次使用string来调用strtok函数,以便完成初始化工作。可以在token参数中使用多个字符。字符串将被该参数中任何一个字符分割。

参数:


str:原始字符串。

token:分割str时使用的分界字符。

返回值:


标记 的字符串。

implode()函数

说明:


implode(string $glue, array $pieces):string
    
implode(array $pieces):string

用glue将一维数组的值连接为一个字符串。

参数:


glue:默认为空的字符串。

pieces:想要转换的数组。

返回值:


返回一个字符串,其中内容由glue分割开的数组的值。

注释:


此函数可以安全用于二进制对象。

join()函数

说明:


此函数是implode()函数的别名。

【示例】

<?php
// 定义字符串变量
$input = "How_to_split_this_sentance.";
// 定义按空格查分的字符串
$input2 = "把 这个句子 按空格 拆分。";
// 切分字符串input
$a = explode('_', $input);
// 输出切分后的字符串
print_r($a);
$b = explode(' ', $input2);
print_r($b);

echo implode('>', $a)."<br />";
echo implode('*', $b);
?>

程序运行结果:

在这里插入图片描述

字符串的截取

substr()函数

说明:


substr(string $string, int $start [, int $length]):string

返回字符串string由start和length参数指定的子字符串。

参数:


string:输入字符串。必须至少有一个字符。

start:如果start是非负数,返回的字符串将从string的start位置开始,从0开始计算。如在字符串"abcdef"中,在位置0的字符是"a",位置2的字符串是"c"。如果start是负数,返回的字符串将从string结尾处向前数第start个字符开始。如果string的长度小于start,将返回FALSE。

length:如果提供了整数的length,返回的字符串将从start处开始最多包括length个字符(取决于string的长度)。如果提供了负数的length,那么string末尾处的length个字符将会被省略(若start是负数则从字符串尾部算起)。如果start不在这段文本中,那么将返回FALSE。如果提供值为0,FALSE或NULL的length,那么将返回一个空字符串。如果没有提供length,返回的子字符串将从start位置开始直到字符串结尾。

返回值:


返回提取的子字符串,或者失败时返回FALSE。

【示例】

<?php
echo substr('abcdef', 1);		// bcdef
echo substr('abcdef', 1, 3);	// bcd
echo substr('abcdef', 0, 4);	// abcd 
echo substr('abcdef', 0, 8);	// abcdef
echo substr('abcdef', -1, 1);	// f 

// 访问字符串中的单个字符
// 也可以使用中括号
$string = 'abcdef';
echo $string[0];		// a
echo $string[3];		// d 
echo $string[strlen($string) -1];	// f 
?>

字符串替换

substr_replace()函数

说明:


substr_replace(mixed $string, mixed $replacement, mixed $start [, mixed $length]):mixed

substr_replace()在字符串string的副本中将由start和可选的length参数限定的子字符串使用replacement进行替换。

参数:


string:输入字符串。

replacement:替换字符串。

start:如果start为整数,替换将从string的start位置开始。如果start为负数,替换将从string的倒数第start个位置开始。

length:如果设定了这个参数并且为正数,表示string种被替换的子字符串的长度。如果设定为负数,它表示替换的子字符串结尾处距离string末端的字符个数。如果没有提供此参数,那么它默认为strlen(string)(字符串的长度)。如果length为0,那么这个函数的功能为将replacement插入到string的start位置处。

返回值:


返回结果字符串。如果string是个数组,那么也将返回一个数组。

字符串查找

strstr()函数

说明:


strstr(string $haystack, mixed $needle [, bool $before_needle=FALSE]):string

返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串。

该函数区分大小写。如果想要不区分大小写,应使用stristr()

如果仅仅想确定needle是否在haystack中,请使用速度更快、耗费内存更少的strpos()函数。

参数:


haystack:输入字符串。

needle:如果needle不是一个字符串,那么它将被转化为整型并且作为字符的序号来使用。

before_needle:若为TRUE,strstr()将返回needle在haystack中的位置之前的部分。

返回值:


返回字符串的一部分或者FALSE(如果未发现needle)。

【示例】

<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain.'<br />';	// 打印@example.com

$user = strstr($email, '@', true);	// 从PHP5.3.0起
echo $user;	//打印name
?>

stristr()函数

说明:


stristr(string $haystack, mixed $needle[, bool $before_needle=FALSE]):string

该函数是strstr()函数的忽略大小写版本。

strpos()函数

查找字符串首次出现的位置

说明:


strpos(string $haystack, mixed $needle[, int $offset=0]):int

返回needle在haystack中首次出现的数字位置。

参数:


haystack:在该字符串中进行查找。

needle:如果needle不是一个字符串,那么它将被转换为整型并视为字符的顺序值。

offset:如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。如果是负数,搜索会从字符串结尾指定字符数开始。

返回值:


返回needle存在与haystack字符串其实的位置(独立于offset)。同时注意字符串位置是从0开始,而不是从1开始的。如果没找到needle,将返回FALSE。(PHP7.1.0 开始支持负数的offset)。

【字符串查找示例】

<?php
$input = "I have a Dream that to find a string with a dream.";
$input2 = "我有一个梦想,能够找到理想。";
echo strstr($input, "dream")."<br />";		// 输出dream
echo stristr($input, "dream")."<br />";		// 输出Dream that to find a string with a dream.
echo strstr($input, "that")."<br />";		// 输出that to find a string with a dream
echo strstr($input2, "梦想")."<br />";		// 输出梦想,能够找到理想。

?>

大小写转换

常见的大小写转换函数有strtolower()strtoupper()ucfirst()ucwords()

strtolower()函数

将字符串转化为小写

说明:


strtolower(string $string):string

将string中所有的字母字符转换为小写并返回。

注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-A(?)就不会被转换。

参数:


string:输入字符串

返回值:


返回转换后的小写字符串。

strtoupper()函数

将字符串转换为大写

说明:


strtoupper(string $string):string

将string中所有的字母字符转换为大写并返回。

注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-a(?)就不会被转换。

参数:


string:输入字符串

返回值:


返回转换后的大写字符串。

ucfirst()函数

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

说明:


ucfirst(string $str):string

将str的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串。

注意:“字母”与当前所在区域有关。例如,在默认的“C”区域,字符umlaut-a(?)就不会被转换。

参数:


str:输入字符串

返回值:


返回结果字符串。

ucwords()函数

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

说明:


ucwords(string $str [, string $delimiters="\t\r\n\f\v"]):string

将str中每个单词的首字符(如果首字符是字母)转换为大写字母,并返回这个字符串。

这里单词的定义要紧跟在delimiters参数(默认:空格、制表符、换行符、回车符、水平线以及竖线)之后的子字符串。

参数:


str:输入字符串。

delimiters:可选的delimiters,包含了单词分割字符。

返回值:


返回转换后的字符串。

此函数可以安全用于二进制对象

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值