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 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: