2026-10-21 17:26:36
PHP中正则表达式通过preg_match、preg_match_all、preg_replace和preg_split等函数实现匹配、替换和分割操作,核心是构建符合规则的模式字符串,并结合函数特性处理目标文本。
一、核心函数及用法preg_match()
功能:检查字符串是否匹配模式,返回首次匹配结果(成功返回1,失败返回0)。
示例:$string = "This is a test string.";$pattern = "/test/";if (preg_match($pattern, $string)) { echo "找到了匹配项!";} else { echo "未找到匹配项。";}
preg_match_all()
功能:匹配所有符合模式的内容,结果存储在数组中。
示例:$string = "The cat sat on the mat. The cat is fat.";$pattern = "/cat/";preg_match_all($pattern, $string, $matches);print_r($matches); // 输出所有"cat"的匹配结果
preg_replace()
功能:替换匹配模式的字符串部分。
示例:$string = "Hello world!";$pattern = "/world/";$replacement = "PHP";$newString = preg_replace($pattern, $replacement, $string);echo $newString; // 输出"Hello PHP!"
preg_split()
功能:按模式分割字符串,返回数组。
示例:$string = "apple,banana,orange";$pattern = "/,/";$fruits = preg_split($pattern, $string);print_r($fruits); // 输出["apple", "banana", "orange"]
字面量字符
直接匹配字符(如a、1),无需特殊处理。
元字符
.:匹配任意字符(除换行符)。
*:匹配前一项零次或多次。
+:匹配前一项一次或多次。
?:匹配前一项零次或一次。
[]:定义字符类(如[a-z]匹配小写字母)。
`()``:分组并捕获匹配内容。
量词
{n}:精确匹配n次。
{n,}:至少匹配n次。
{n,m}:匹配n到m次。
锚点
^:匹配字符串开头。
$:匹配字符串结尾。
b:匹配单词边界。
转义字符
用转义元字符(如.匹配句点,匹配反斜杠)。
示例:匹配电子邮件地址
$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/";^[a-zA-Z0-9._%+-]+:开头为字母、数字或特定符号(至少一个)。
@:匹配@符号。
[a-zA-Z0-9.-]+:域名部分(字母、数字、点或连字符)。
.[a-zA-Z]{2,}$:顶级域名(至少两个字母,结尾)。
转义需求:若需匹配元字符本身(如.、*),需用转义。示例:
$string = "This is a test. This is another test.";$pattern = "/./"; // 匹配句点preg_match_all($pattern, $string, $matches);print_r($matches); // 输出所有句点位置变量与引号:正则表达式包含变量时,建议使用单引号字符串避免解析错误。错误示例:
$var = "test";$pattern = "/$var/"; // 若$var含特殊字符可能导致意外行为正确做法:
$var = "test";$pattern = '/'.preg_quote($var, '/').'/'; // 转义变量中的特殊字符非贪婪模式(如.*?代替.*)。
固化分组(如(?>pattern)防止回溯)。
验证URL
$pattern = "/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/";提取HTML标签内容
$pattern = "/<p>(.*?)</p>/"; // 提取<p>标签内的文本删除HTML标签
$pattern = "/<[^>]*>/"; // 匹配所有HTML标签并删除验证电话号码(国际格式)
$pattern = "/^(+d{1,3}[- ]?)?d{8,15}$/";总结:PHP正则表达式的核心是模式构建与函数选择。通过理解元字符、量词、锚点等基础元素,结合性能优化技巧,可高效处理字符串匹配、替换和分割任务。实践时建议从简单案例入手,逐步掌握复杂模式的调试方法。