PHP 中正则表达式的使用
PHP 中 PCRE
库和 POSIX
库的对比:
提示: 我们更推荐使用 后者PCRE
库,因为它效率更高。
POSIX | PCRE(推荐) | 阐述 |
---|---|---|
ereg_replace() | preg_replace() | 替换 |
ereg() | preg_match() | 匹配 |
eregi_replace() | preg_replace() | 替换 |
eregi() | preg_match() | 匹配 |
split() | preg_split() | 分割 |
spliti() | preg_split() | 分割 |
spl_regcase() | 无对等函数(可用模式修饰符i 代替) |
产生用于不区分大小的匹配的正则表达式 |
RCRE 函数的分隔符
RCRE
需要由分隔符闭合包裹。- 分隔符可以使用任意 非字母数字、非反斜线、非空白字符,例如:
/foo bar/
分隔符为/
#^[0-9]$#
分隔符为#
+php+
分隔符为+
%[a-zA-Z0-9_-]%
分隔符为%
- 当然我们推荐统一使用
/
PCRE的主要函数
preg_grep($pattern, $array)
------ 返回与正则表达式匹配的数组单元。preg_match($pattern, $string)
------ 执行一个正则表达式匹配preg_match_all()
------ 执行一个全局正则表达式匹配preg_filter
------ 执行一个正则表达式搜索 和 替换preg_replace
------ 执行一个正则表达式的搜索和替换preg_replace_callback
------ 执行搜索并且使用一个回调进行替换preg_split
------ 通过一个正则表达式分割字符串preg_quoto
------ 转义正则表达式字符preg_last_error
------ 返回最后一个 PCRE 正则执行产生的错误代码
实例
1. preg_grep()
匹配数组
返回与正则表达式匹配的数组单元
<?php
$array = ['Linux RedHat9.0', 'Apache2.2.9', 'MySQL5.0.51', 'PHP5.2.6', 'LAMP', '100'];
// 返回与正则匹配的数组元素
$version = preg_grep("/^[a-zA-Z]+(\d|\.)+$/", $array);
print_r($version);
结果输出:
Array
(
[1] => Apache2.2.9
[2] => MySQL5.0.51
[3] => PHP5.2.6
)
2.1 preg_replace()
文本替换
普通替换用法:
<?php
// 正则
$pattern = "/<[\/\!]*?[^<>]*?>/is";
// 待匹配文本内容
$text = "这个文本中有 <b>粗体</b> 和 <u>带有下划线</u>以及 <i>斜体</i>还有 <font color='red' size='7'>带有颜色和字体大小</font>的标记";
// 将所有 HTML 标记替换为空。
echo preg_replace($pattern, "", $text);
echo PHP_EOL . "<br/>" . PHP_EOL;
// 通过第4个参数传入数字2,替换前两个匹配到的 HTML 标记
echo preg_replace($pattern, "", $text, 2);
结果输出:
这个文本中有 粗体 和 带有下划线以及 斜体还有 带有颜色和字体大小的标记
<br/>
这个文本中有 粗体 和 <u>带有下划线</u>以及 <i>斜体</i>还有 <font color='red' size='7'>带有颜色和字体大小</font>的标记
2.2 preg_replace()
文本替换 - 反向引用
包含反向引用:
<?php
// 日期格式的正则表达式
$pattern = "/(\d{2})\/(\d{2})\/(\d{4})/";
$text = "今年国庆节放假日期为 10/01/2019 到 10/07/2019 共7天。";
echo preg_replace($pattern, "\\3 - \\1 - \\2", $text);
echo PHP_EOL . "<br/>" . PHP_EOL;
echo preg_replace($pattern, "\${3} - \${1} - \${2}", $text);
结果输出:
今年国庆节放假日期为 2019 - 10 - 01 到 2019 - 10 - 07 共7天。
<br/>
今年国庆节放假日期为 2019 - 10 - 01 到 2019 - 10 - 07 共7天。
3 preg_split()
分割字符串
<?php
// 按正则所匹配的分隔符进行分割字符串
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
// 将字符串分割成 单个字符
$chars = preg_split("//", 'lamp', -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
// 将字符串分割为匹配项及其偏移量
$chars = preg_split("/ /", 'hypertext language, programming', -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
本作品采用《CC 协议》,转载必须注明作者和本文链接