PHP处理字符串
一:字符串分割成数组
日常工作中,如果需要把一个字符串分割成数组,我们一般使用 explode() 函数对字符串进行分割,具体代码如下所示:
<?php
$str = 'PHP|python|java|js|css|html';
$arr = explode('|',$str);
print_r($arr);
参数一:匹配分割的字符
参数二:待分割的字符串
参数三:匹配的次数。默认一致匹配到最后一个
打印的结果如下:
Array
(
[0] => PHP
[1] => python
[2] => java
[3] => js
[4] => css
[5] => html
)
虽然 explode() 函数很方便,但是它只支持固定的分割符,对字符串进行分割。如果需要使用正则进行匹配分割字符串,可以使用 preg_split() 函数
preg_split() 函数是通过正则表达式模式匹配分隔符的方法,实现字符串分割成数组的操作。其基本语法如下:
array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
参数一:正则表达式
参数二:待匹配的字符串
参数三:匹配的次数。默认-1,表示匹配到最后一个
参数四:特殊参数。以位或运算 | 组合。PREG_SPLIT_NO_EMPTY:仅返回分隔后的非空部分
返回值:匹配的次数。如果没有匹配到返回0
如果不是很了解的可以先看看下方案例:
<?php
$str = '[PHP|python|java]-[js|css|html]';
$arr = preg_split('/[\[\]|,-]/',$str,-1,PREG_SPLIT_NO_EMPTY);
print_r($arr);
打印的结果和上面的 explode() 函数一模一样,但是它所实现的功能却更加强大。
二:正则替换字符串中字符
preg_replace 函数执行一个正则表达式的搜索和替换。语法如下所示:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
参数一:正则匹配规则
参数二:用于替换的字符串或字符串数组
参数三:要搜索替换的目标字符串或字符串数组
参数四:可选,对于每个模式用于每个 subject 字符串的最大可替换次数。默认是-1(无限制)
参数五:可选,为替换执行的次数。(用于统计被替换的次数)
返回值:如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。
具体表现和用法大家可以看看下方案例,将字符串$string中的PHP替换成Python:
<?php
$string = 'PHP 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = 'Python $2,$3';
echo preg_replace($pattern, $replacement, $string);
注意:上述代码$replacement中的$2 和 $3 是正则$pattern 匹配的结果列表中的第二个和第三个结果值
其实可以直接简单点,直接匹配替换:
$string = 'PHP 123, 456';
echo preg_replace('/PHP/','Python',$string);
//打印结果:Python 123, 456
三:正则匹配邮箱
邮箱验证几乎是日常工作中我们必须遇到的问题,例如找回密码及重置密码等行为就可以通过邮箱来验证用户的真假。
要使用正则表达式匹配邮箱,可以使用PHP的preg函数结合邮箱的正则表达式模式。以下是一个示例代码:
<?php
$email = "example@example.com";
// 正则表达式模式匹配邮箱
$pattern = '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/';
// 使用preg函数进行匹配
if (preg_match($pattern, $email)) {
echo "邮箱格式正确";
} else {
echo "邮箱格式错误";
}
在上面的代码中,使用正则表达式模式/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/来匹配邮箱。这个正则表达式模式可以匹配大多数常见的邮箱格式。
正则符号含义:
^:开始符号 $ :结尾符号
正则符号有点多,不明的可以看看百度百科的正则表达式:
https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215
四:正则匹配手机号
正则表达式匹配手机号码,可以使用以下正则表达式模式:
$pattern = '/^1[3456789]\d{9}$/';
这个正则表达式模式匹配以1开头,第二位为3、4、5、6、7、8、9中的任意一个数字,后面跟着9个数字的手机号码。
注意:上面的匹配方式可能会匹配到虚拟手机号,如果想要排除虚拟手机号,可以自己做一个黑名单,把网上的虚拟手机号统统拉进黑名单中。
五:匹配数组中的值
上面的preg_match函数匹配的是字符串,但是PHP提供了 preg_grep 函数用于匹配数组中的值,返回匹配模式的数组条目。语法如下:
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
参数一:正则表达式
参数二:待匹配的数组
参数三:如果设置为 PREG_GREP_INVERT,这个函数返回输入数组中与给定模式 pattern 不匹配的元素组成的数组。
返回数组中指定匹配的元素:
<?php
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮点数的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);
改正则函数返回的是一个数组格式,数组中是符合匹配的结果值列表。打印结果如下所示:
Array
(
[2] => 3.4
[4] => 7.9
)