2023 © RegexOne
邮箱 | Twitter
如果您需要复习正则表达式的使用方法,请先查看我们的 交互式教程!
PHP 通过使用 PCRE(与 Perl 兼容的正则表达式)库 支持正则表达式,该库在几乎所有 PHP 安装中都已启用。在调用以下任何方法时,PHP 要求每个模式都以相同的定界符开头和结尾,以将其与普通字符串区分开来,最常见的定界符是 正斜杠字符。
例如,您将在 PHP 中将正则表达式 "\w+"
编写为 "/\w+/"
,以表示匹配一个或多个字母数字字符的表达式。
在 PHP 中,您可以使用 preg_match()
函数来测试正则表达式是否与特定字符串匹配。请注意,此函数在第一次匹配后停止,因此它最适合用于测试正则表达式而不是提取数据。
$has_matches = preg_match($pattern, $input_str, $matches_out)
// 让我们使用正则表达式来匹配日期字符串。忽略 // 输出,因为我们只是测试正则表达式是否匹配。 $regex = "/[a-zA-Z]+ \d+/"; if (preg_match($regex, "June 24")) { // 确实,表达式 "[a-zA-Z]+ \d+" 匹配日期字符串 echo "找到匹配项!"; } else { // 如果 preg_match() 返回 false,则正则表达式不 // 匹配字符串 echo "正则表达式模式不匹配。:("; }
与上面的 preg_match()
函数不同,我们可以使用 preg_match_all()
函数对输入字符串执行全局搜索。如果 preg_match_all()
返回 true,则可以迭代 $matches_out
指定的数组。
$has_matches = preg_match_all($pattern, $input_str, $matches_out)
// 让我们编写一个正则表达式来提取 // 包含多个日期的字符串中的月份日期 $pattern = "/[a-zA-Z]+ (\d+)/"; $input_str = "June 24, August 13, and December 30"; if (preg_match_all($pattern, $input_str, $matches_out)) { // $matches_out 现在是一个大小等于 N+1 的数组,其中 N // 是您在正则表达式中捕获的组数,+1 // 用于匹配的子字符串。 // 这将打印“2”,因为我们只捕获了一个组 echo count($matches_out); // 此外,$matches_out 中的每个值都是另一个大小为 M 的数组, // 其中 M 是正则表达式在输入中的匹配次数。 // 这将打印“3”,表示输入字符串中的三个日期 echo count($matches_out[0]); // $matches_out[0] 是一个包含来自 // 输入字符串的匹配字符串的数组。 // 这将打印一个数组(“June 24”,“August 13”,“December 30”) print_r($matches_out[0]); // $matches_out[1]、$matches_out[2] 等是填充了 // 捕获数据的数组,其顺序与正则表达式模式相同。 // 这将打印一个数组(“24”,“13”,“30”) print_r($matches_out[1]); }
有时使用正则表达式查找和替换字符串非常方便,例如,将所有旧电子邮件域替换为新域名,或交换某些文本的顺序。您可以使用 preg_replace()
函数执行此操作。
$replaced_str = preg_replace($pattern, $partial_replacement_str, $input_str)
// 让我们尝试反转日期字符串中日期和月份的顺序 // 注意我们如何通过索引(即 $1 和 $2)直接引用这两个组。 $regex = "/([a-zA-Z]+) (\d+)/"; $new_string = preg_replace($regex, "$2 of $1", "June 24"); // 返回的字符串要么是相同的输入字符串(如果正则表达式 // 不匹配),要么是转换后的字符串。 // 这将打印“24 of June” echo $new_string;
有关在 PHP 中使用正则表达式的更多信息,请访问以下链接