当前位置 : 主页 > 网络编程 > PHP >

php字符串怎么只提取中文字符

来源:互联网 收集:自由互联 发布时间:2022-11-14
两种方法:1、用preg_match_all()配合正则过滤字符串,语法“preg_match_all(/[\x{4e00}-\x{9fff}]+/u,$str,$arr);”;2、用preg_replace()配合正则搜索字符串中的非中文字母,并将其替换成空字符,语法“

两种方法:1、用preg_match_all()配合正则过滤字符串,语法“preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);”;2、用preg_replace()配合正则搜索字符串中的非中文字母,并将其替换成空字符,语法“preg_replace("/[^\x{4E00}-\x{9FFF}]+/u",'',$str)”。

php入门到就业线上直播课:进入学习
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用

本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑

在php中,可以利用以下两种函数来只提取字符串的中文字符

  • preg_replace()函数

  • preg_match_all()函数

方法1:使用preg_match_all()函数

preg_match_all()函数配合正则表达式“/[\x{4e00}-\x{9fff}]+/u”可以过滤字符串,只获取中文字符。

会将匹配的中文字符一个个存入数组中(该数组由第三个参数指定)。

<?php
header("Content-type:text/html;charset=utf-8");
$str = "欢迎4546来到php这里。zblog,我的?#$%^天呀&())*(&^";
echo $str;
preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);
var_dump($arr);
?>
登录后复制

1.png

然后可以使用join()函数将结果值拼接成一个字符串。

join('',$arr[0])
登录后复制

2.png

说明:

1)preg_match_all()函数

preg_match_all()函数会搜索字符串中所有可以和正则表达式匹配的结果

preg_match_all(pattern,subject,matches,flags,offset)
登录后复制

参数说明如下:

  • pattern:要搜索的模式,也就是定义好的正则表达式;
  • subject:要搜索的字符串;
  • matches:可选参数(多维数组),用来存放所有匹配的结果, 数组排序通过 $flags 指定;
  • flags:可选参数,可以结合下面几个标记使用(注意不能同时使用 PREG_PATTERN_ORDER 和 PREG_SET_ORDER):
    • PREG_PATTERN_ORDER:结果排序为 $matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一个子组的所有匹配,以此类推。
    • PREG_SET_ORDER:结果排序为 $matches[0] 包含第一次匹配得到的所有匹配(包含子组), $matches[1] 是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。
    • PREG_OFFSET_CAPTURE:如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的偏移量。注意这会改变 $matches 中的每一个匹配结果字符串元素,使其成为一个第 0 个元素为匹配结果字符串,第 1 个元素为匹配结果字符串在 subject 中的偏移量。
  • offset:可选参数,$offset 用于从目标字符串中指定位置开始搜索(单位是字节)。

preg_match_all() 函数可以返回 pattern 的匹配次数(可能是 0),如果发生错误则返回 FALSE。

2)join()函数

join() 函数返回一个由数组元素组合成的字符串。

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

join(separator,array)
登录后复制
  • separator:可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。

  • array:必需。要组合为字符串的数组。

返回值:返回一个由数组元素组合成的字符串。

方法2:使用preg_replace()函数

preg_match_all()函数配合正则表达式“/[^\x{4E00}-\x{9FFF}]+/u”搜索字符串中的非中文字母,并将其替换成空字符''即可。

<?php
header("Content-type:text/html;charset=utf-8");
$str= '自由互联!-=1548';
echo $str."<br>";
$pattern = "/[^\x{4E00}-\x{9FFF}]+/u";
$newstr=preg_replace($pattern,'', $str);preg_match_all("/[\x{4e00}-\x{9fff}]+/u","$str",$arr);
var_dump($newstr);
?>
登录后复制

3.png

说明:preg_replace()

preg_replace() 函数可以执行正则表达式的搜索和替换,是一个强大的字符串替换处理函数,该函数的语法格式如下:

preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])
登录后复制

参数说明如下:

  • $pattern:要搜索的模式,可以使一个字符串或字符串数组;
  • $replacement:用于替换的字符串或字符串数组。如果这个参数是一个字符串,并且 $pattern 是一个数组,那么所有的模式都使用这个字符串进行替换。如果 $pattern 和 $replacement 都是数组,每个 $pattern 使用 $replacement 中对应的元素进行替换。如果 $replacement 中的元素比 $pattern 中的少,多出来的 $pattern 使用空字符串进行替换。
  • $subject:要进行搜索和替换的字符串或字符串数组,如果 $subject 是一个数组,搜索和替换回在 $subject 的每一个元素上进行, 并且返回值也会是一个数组。
  • $limit:可选参数,每个模式在每个 $subject 上进行替换的最大次数。默认是 -1(无限)。
  • $count:可选参数,如果指定,将会被填充为完成的替换次数。

如果 $subject 是一个数组,preg_replace() 函数会返回一个数组,其他情况下返回一个字符串。

如果函数 preg_replace() 搜索到匹配项,则会返回被替换后的 $subject,否则返回没有改变的 $subject。preg_replace() 函数的每个参数(除了参数 $limit)都可以是一个数组。如果参数 $pattern 和参数 $replacement 都是数组,那么该函数将以其键名在数组中出现的顺序来进行处理。如果发生错误,则返回 NULL。

参数 $replacement 中可以包含后向引用 \\n 或 $n,语法上首选后者。每个这样的引用将被匹配到的第 n 个捕获子组捕获到的文本替换。n 可以是 0-99,\\0 和 $0 代表完整的模式匹配文本。

推荐学习:《PHP视频教程》

以上就是php字符串怎么只提取中文字符的详细内容,更多请关注自由互联其它相关文章!

上一篇:php字符串反转的函数是什么
下一篇:没有了
网友评论