PHP基础编程之鬼斧神工的正则表达式-正则表达式初探+常用的正则表达式函数

前言

很多小伙伴在学习php中,正则表达式是一道过不去的坎,初学者在看到正则表达式的复杂符号时,总会一头雾水,丈二的和尚摸不着头脑,冷月在刚刚开始学习正则表达式时也是一头懵。不过,冷月会用由浅入深的讲解正则表达式的基础和简单实战,相信大家看完这篇文章时,会有一定的收获。好了,废话不多说,让我们开启正则表达式的学习吧!let’s go!

初识正则表达式

我们先来看一看在菜鸟教程里,正则表达式的定义:

  • 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z之间的字母)和特殊字符(称为"元字符")。
  • 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
  • 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
  • 许多程序设计语言都支持利用正则表达式进行字符串操作。

相信大家看到这么学术的话语,或多或少都有些瞌睡感,冷月在这里总结一下,简单来说,正则表达式就是根据特定的匹配规则,在待处理的数据中,匹配出结果来

PHP中常用的正则表达式函数

事先声明:以下参数 $pattern=正则表达式; $subject = 匹配的目标数据,如果小伙伴们对正则表达式的基本语法不了解可以配合冷月的下一篇博客来学习,冷月在下一篇博客中详细的介绍了正则表达式的基本语法

1.preg_match() 和preg_match_all()

preg_match() 和preg_match_all()用于执行一个正则表达式匹配。接收3个参数:

参数名 说明
$pattern 输入要搜索的模式,也就是正则字符串
$subject 输入字符串
&$matches 多维数组,作为输出参数输出匹配结果

其中要主要到的是,第三个参数为引用参数,在函数内改变引用参数的值会改变外部参数的值,不理解的同学可以参考冷月的另一篇博文《php面试笔记(1)-php基础知识-变量和引用变量》学习。

preg_match() 匹配到一次就返回,preg_match_all()匹配所有的结果,返回值为成功匹配的次数。

我们来看一段实例代码:


<?php
/**
 * Created by 冷月小白.
 * 微信公众号: 学长冷月
 */

$pattern = "/[0-9]/"; //匹配数字0-9
$subject = "4sd54as54ds54ds"; //待匹配的文本
$a1 = $a2 = [];//存放匹配结果的数组

preg_match($pattern, $subject, $a1);
preg_match_all($pattern, $subject, $a2);

print_r($a1); //输出 [0] => 4
echo "<br />";
print_r($a2);//输出 [0] => Array (
//[0] => 4,
//[1] => 5,
//[2] => 4,
//[3] => 5,
//[4] => 4,
//[5] => 5,
//[6] => 4,
// )
?>

2.preg_replace() 和preg_filter()

preg_replace() 和preg_filter()用于执行一个正则表达式搜索和替换。接收3个参数:

参数名 说明
$pattern 输入要搜索的模式,也就是正则字符串
$replacement 替换的字符串或字符串数组
$subject 要进行搜索和替换的字符串或字符串数组

preg_replace() 和preg_filter()的功能基本相同。区别只有在匹配字符串数组时preg_filter 只返回匹配结果,不匹配的直接忽略,而 preg_replace 将不匹配的结果也一起返回。

我们来看一段示例代码:

<?php
/**
 * Created by 冷月小白.
 * 微信公众号: 学长冷月
 */

$pattern = "/[0-9]/"; //匹配数字0-9
$subject = "4sd54as54ds54ds"; //待匹配的文本
$replacement = '数字'; //用于替换的字符串

$str1 = preg_replace($pattern, $replacement, $subject);
$str2 = preg_filter($pattern, $replacement, $subject);

print_r($str1); //输出 数字sd数字数字as数字数字ds数字数字ds
echo "<br />";
print_r($str2);//输出 数字sd数字数字as数字数字ds数字数字ds
?>

3.preg_grep()

preg_grep() 函数用于返回匹配模式的数组条目。也就是说preg_grep()是阉割版的preg_filter()函数,只匹配个数,不替换文本。接收2个参数:

参数名 说明
$pattern 输入要搜索的模式,也就是正则字符串
$input 输入的数组

我们来看一段示例代码:

<?php
/**
 * Created by 冷月小白.
 * 微信公众号: 学长冷月
 */
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮点数的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array); //输出 ([2] => 3.4 [4] => 7.9)
?>

4.preg_split()

preg_replace 函数通过一个正则表达式分隔字符串。也就是根据正则来分隔字符串。接收2个参数:

参数名 说明
$pattern 输入要搜索的模式,也就是正则字符串
$subject 输入字符串

我们来看一段示例代码:

<?php 
<?php
/**
 * Created by 冷月小白.
 * 微信公众号: 学长冷月
 */

$pattern = "/[0-9]/"; //匹配数字0-9
$subject = "4sd4as5ds5ds"; //待匹配的文本

$res = preg_split($pattern, $subject);
var_dump($res); //输出
// [
//[0]=> string(0) "",
// [1]=> string(2) "sd",
// [3]=> string(2) "as",
// [5]=> string(2) "ds",
// [7]=> string(2) "ds"]

5.preg_split()

preg_last_error 函数用于转义正则表达式字符。也就是为每个正则表达式语法中的字符前增加一个反斜线。 这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候。正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
也就是说,在使用正则表达式时,有些特殊字符有其他特定的意义,而使用preg_split()转义后,可以被PHP正则函数正常的识别。

好了,今天冷月为大家的分享就到这里了,小伙伴们在学习了本博文后,应该对正则表达式的使用有了一定的理解,但是也要勤加练习,才能早日成为代码大师呦!明天,冷月将为大家带来正则表达式的基本语法和简单实例。

欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com

猜你喜欢

转载自blog.csdn.net/rebekah_/article/details/104333456
今日推荐