一 字符串包含
1.1 str_starts_with(string $haystack
, string $needle
)
php8版本中新函数。
检查字符串是否以指定子串开头,区分大小写。返回布尔值。
$haystack待判断的字符串,$needle需要查询的内容。
php
function test1() {
$str = "Qwe asd zxc 123";
if (str_starts_with($str, '')) {
echo __LINE__ . PHP_EOL; //5
}
if (str_starts_with($str, 'Qwe')) {
echo __LINE__ . PHP_EOL; //8
}
if (str_starts_with($str, 'qwe')) {
echo __LINE__ . PHP_EOL; //11
}
}
test1();
测试结果
php
5
8
1.2 str_ends_with(string $haystack
, string $needle
)
php8版本中新函数。
检查字符串是否以指定子串结尾。返回布尔值。区分大小写。
$haystack待判断的字符串,$needle需要查询的内容。
php
function test3() {
$str = "Qwe asd zxc 123 z";
var_dump(str_ends_with($str, "Z"));
var_dump(str_ends_with($str, "z"));
var_dump(str_ends_with($str, "q"));
var_dump(str_ends_with($str, "123"));
}
test3();
测试结果
php
bool(false)
bool(true)
bool(false)
bool(false)
1.3 strstr(string $haystack
, string $needle
, bool $before_needle
= false
)
查找字符串的首次出现。返回字符串或布尔值。区分大小写。
1.4 stristr(string $haystack
, string $needle
, bool $before_needle
= false
)
strstr()函数的忽略大小写版本。
php
function test4() {
$str = "Qwe asd zxc 123 z";
var_dump(strstr($str, "Qwe"));
var_dump(strstr($str, "we"));
var_dump(strstr($str, "we", true));
var_dump(strstr($str, "q"));
var_dump(stristr($str, "q"));
}
test4();
测试结果
php
string(17) "Qwe asd zxc 123 z"
string(16) "we asd zxc 123 z"
string(1) "Q"
bool(false)
string(17) "Qwe asd zxc 123 z"
1.5 strpos(string $haystack
, string $needle
, int $offset
= 0)
查找字符串首次出现的位置。计算从零开始,也就是返回1,代表字符串中第二个位置;偏移到字符串第二个字符,偏移量是2。区分大小写。返回整数或者布尔值。
第一个字符返回值为0,应该使用0===value判断。不存在返回false,应该使用false===value判断。
$offset 为偏移量。
1.6 stripos(string $haystack
, string $needle
, int $offset
= 0)
strpos()函数的忽略大小写版本。
php
function test5() {
$str = "Qwe asd zxc 123 we";
var_dump(strpos($str, "Qwe"));
var_dump(strpos($str, "we"));
var_dump(strpos($str, "we", 2));
var_dump(strpos($str, "q"));
var_dump(stripos($str, "WE"));
}
test5();
测试结果
php
int(0)
int(1)
int(16)
bool(false)
int(1)
1.7 strpbrk(string $string
, string $characters
)
在字符串中查找一组字符的任何一个字符。
返回以找到的字符开始的子字符串。如果没有找到,则返回 false
。
$string 在string中查找characters字符串。
$characters 要查询的内容。区分大小写。
php
function test7() {
$str = "Qwe asd zxc 123 we";
$info = strpbrk($str, 'a');
var_dump($info);
$info = strpbrk($str, 'A');
var_dump($info);
}
test7();
测试结果
php
string(14) "asd zxc 123 we"
bool(false)
1.8 preg_match()
执行匹配正则表达式。匹配到返回1,未匹配到返回0或者false。
参数
$pattern 正则表达式
$subject
需验证的字符串。 避免使用substr()。&$matches
匹配结果$flags
偏移量$offset
开始搜索位置
$flags说明
PREG_OFFSET_CAPTURE
附加偏移量
PREG_UNMATCHED_AS_NULL
使用该标记,未匹配的子组会报告为null
;未使用时,报告为空的 string。
php
function test8() {
$str = "Qwe asd zxc 123 we";
$pattern = '/(?<=d).*(?=w)/';
$result = preg_match($pattern, $str, $info, PREG_OFFSET_CAPTURE);
var_dump($result);
var_dump($info);
$result = preg_match($pattern, $str, $info, PREG_OFFSET_CAPTURE, 8);
var_dump($result);
var_dump($info);
}
test8();
测试结果
php
int(1)
array(1) {
[0]=>
array(2) {
[0]=>
string(9) " zxc 123 "
[1]=>
int(7)
}
}
int(0)
array(0) {
}
1.9 str_word_count(string $string
, int $format
= 0, ?string $characters
= null
)
返回字符串中单词的使用情况。返回数组或整数
如果指定了 format
参数,返回值将是一个数组,数组的内容则取决于 format
参数。
$format
- 0 返回单词数量
- 1 返回一个包含
string
中全部单词的数组 - 2 返回关联数组。数组的键是单词在
string
中出现的数值位置,数组的值是这个单词
$characters
附加的字符串列表,其中的字符将被视为单词的一部分。
php
function test9() {
$str = "Qwe asd zxc 123 we";
$info = str_word_count($str);
var_dump($info);
$info = str_word_count($str, 1);
var_dump($info);
$info = str_word_count($str, 0, "123456^ ^");
var_dump($info);
$info = str_word_count($str, 1, "123456^ ^");
var_dump($info);
$info = str_word_count($str, 2, "123456^ ^");
var_dump($info);
}
test9();
测试结果
php
int(4)
array(4) {
[0]=>
string(3) "Qwe"
[1]=>
string(3) "asd"
[2]=>
string(3) "zxc"
[3]=>
string(2) "we"
}
int(1)
array(1) {
[0]=>
string(18) "Qwe asd zxc 123 we"
}
array(1) {
[0]=>
string(18) "Qwe asd zxc 123 we"
}
被操作的字符串中数字会被过滤掉,除非在$characters中添加数字或需最为单词的字符。
没发现
$format 设置为1或2中区别。
二 字符串分割
2.1 explode(string $separator
, string $string
, int $limit
= PHP_INT_MAX
)
使用一个字符串分割另一个字符串。
$separator 分隔符
$string 字符串
$limit 限制数量。
正数返回从0开始的指定长度内容,最后一个值为字符串剩余部分。
负数返回从末尾开始倒数的内容,直到数组开始,和substr长度的设置一个原理。
传0视为1,返回包含整个字符串的数组。
默认为内置常量PHP_INT_MAX,最大整数。
无对应内容,返回包含整个字符串的数组。
php
function test6() {
$str = "Qwe asd zxc 123 we";
$arr2 = explode("W", $str);
var_dump($arr2);
$arr3 = explode(" ", $str, -2);
var_dump($arr3);
$arr1 = explode(" ", $str, 0);
var_dump($arr1);
$arr4 = explode(" ", $str, 1);
var_dump($arr4);
$arr5 = explode(" ", $str, 2);
var_dump($arr5);
}
test6();
测试结果
php
array(1) {
[0]=>
string(18) "Qwe asd zxc 123 we"
}
array(3) {
[0]=>
string(3) "Qwe"
[1]=>
string(3) "asd"
[2]=>
string(3) "zxc"
}
array(1) {
[0]=>
string(18) "Qwe asd zxc 123 we"
}
array(1) {
[0]=>
string(18) "Qwe asd zxc 123 we"
}
array(2) {
[0]=>
string(3) "Qwe"
[1]=>
string(14) "asd zxc 123 we"
}
2.2 substr(string $string
, int $offset
, ?int $length
= null
)
返回字符串字串。字符串长度小于偏移量返回空字符串。
$offset 偏移量。
为正数从0开始计算。
为负从尾开始计算,倒数指定的偏移量开始计算指定长度。
$length 指定长度。
为正数
从offset
处开始最多包括length
个字符。最多返回到字符串结尾,即length大于字符串长度,返回到字符串结尾的长度。- 为0,返回空字符串
- 为null返回整个字符串
- 为负,那么
string
末尾处的length
个字符将会被省略。若offset
是负数则从字符串尾部算起。如果offset
不在这段文本中,那么将返回空字符串。
php
function test10() {
$str = "Qwe asd zxc 123 we";
$info = substr($str, 2);
var_dump($info);
$info = substr($str, 2, 2);
var_dump($info);
$info = substr($str, 2, 20);
var_dump($info);
$info = substr($str, -10, 2);
var_dump($info);
$info = substr($str, -10, 20);
var_dump($info);
$info = substr($str, 0);
var_dump($info);
}
test10();
测试结果
php
string(16) "e asd zxc 123 we"
string(2) "e "
string(16) "e asd zxc 123 we"
string(2) "zx"
string(10) "zxc 123 we"
string(18) "Qwe asd zxc 123 we"
2.3 substr_count(string $haystack
,string $needle
,int $offset
= 0,?int $length
= null
)
计算字串出现的次数。该函数返回 int。
在$haystack中查找$needle字符串。
$offset 偏移量。
开始计数的偏移位置。如果是负数,就从字符的末尾开始统计。
$length
指定偏移位置之后的最大搜索长度。如果偏移量加上这个长度的和大于 haystack
的总长度,则打印警告信息。 负数的长度 length 是从 haystack
的末尾开始统计的。
php
function test11() {
$str = "Qwe asd zxc 123 we";
try
{
$info = substr_count($str, " ", 5, 5);
var_dump($info);
} catch (\Throwable $e) {
var_dump($e->getTraceAsString());
}
try
{
$info = substr_count($str, " ", 5, 100);
var_dump($info);
} catch (\Throwable $e) {
var_dump($e->getTraceAsString());
}
try
{
$info = substr_count($str, " ", -5, 5);
var_dump($info);
} catch (\Throwable $e) {
var_dump($e->getTraceAsString());
}
try
{
$info = substr_count($str, " ", -5, 100);
var_dump($info);
} catch (\Throwable $e) {
var_dump($e->getTraceAsString());
}
}
test11();
测试结果
php
int(1)
string(117) "#0 D:\workspace\php\test\test12.php(130): substr_count()
#1 D:\workspace\php\test\test12.php(150): test11()
#2 {main}"
int(1)
string(117) "#0 D:\workspace\php\test\test12.php(144): substr_count()
#1 D:\workspace\php\test\test12.php(150): test11()
#2 {main}"
我本地php8版本,cache(\Exception $e){} 捕获不到异常......