两种方法:1、用preg_replace(),可执行正则表达式的搜索和替换,只需将字符串中匹配的字符替换为空字符即可,语法“preg_replace(正则, "", $str)”。2、用preg_match_all(),可搜索字符串中所有和正则表达式匹配的结果,会将每次的匹配结果放在一个数组$array中,语法“preg_match_all(正则,$str,$array);”。
本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑
什么是正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式通过构建具有特定规则的模式,与输入的字符串信息比较,在特定的函数中使用从而实现字符串的匹配、查找、替换及分割等操作。
php利用正则过滤字符串
在php中,可以利用正则表达式过滤字符串,排除(删除)或者提取指定字符。
方法1、使用preg_replace()函数
preg_replace() 函数可以执行正则表达式的搜索和替换,是一个强大的字符串替换处理函数。
preg_replace($pattern, $replacement, $subject [, $limit = -1 [, &$count]])
表示搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换;可选参数 limit 用于设置最大可替换次数(默认值是-1,可无限制)。
示例:
<?php header('content-type:text/html;charset=utf-8'); $str ='0我是123456一段测试的字789符串0'; echo "原字符串:".$str."<br>"; $result = preg_replace("/[^0-9]/", "", $str); echo "过滤后字符串:".$result; ?>
preg_replace("/[^0-9]/", "", $str)
的意思为匹配除了0~9
间的数字以外的字符,并将这些字符替换为空字符(即删除这些字符),那么就只剩下数字字符了:
方法2:使用preg_match_all()函数
preg_match_all()函数可以搜索字符串中所有可以和正则表达式匹配的结果,是一个执行全局正则表达式匹配的函数,它的语法格式为:
preg_match_all($pattern, $subject [, &$matches [, $flags = PREG_PATTERN_ORDER [, $offset = 0 ]]])
$pattern 正则表达式
$subject 进行匹配的字符串
$matches 所有匹配结果(数组)
preg_match_all() 将实现全部结果的匹配,如果想要匹配成功一次后停止匹配,需要使用 preg_match() 函数。
示例:
<?php header('content-type:text/html;charset=utf-8'); $str ='0我是123456一段测试的字789符串0'; echo "原字符串:".$str."<br><br>"; $result = ''; preg_match_all('/\d+/',$str,$array); echo "过滤结果:"; var_dump($array); foreach($array as $arr){ foreach($arr as $value){ $result .= $value; } } echo "过滤后字符串:".$result; ?>
preg_match_all('/\d+/',$str,$array)
的意思为在字符串$str中多次查找只包含0~9
间数字字符的子串,将每次的匹配结果放在一个数组$array
中。我们使用var_dump($array)
来输出这个数组看看:
会发现结果数组$array
是一个二维数组,包含匹配结果的元素是内层的数组。而想要将这些元素拼接成一个字符串,就需要嵌套两层foreach循环:
foreach($array as $arr){ foreach($arr as $value){ $result .= $value; } } echo "过滤后字符串:".$result;
推荐学习:《PHP视频教程》
以上是php怎么利用正则排除字符串中的字符的详细内容。更多信息请关注PHP中文网其他相关文章!