📜  PHP-正则表达式(1)

📅  最后修改于: 2023-12-03 15:03:44.220000             🧑  作者: Mango

PHP 正则表达式

PHP 正则表达式是一种强大的工具,用于在文本中搜索和匹配指定的字符串模式。在本文中,我们将介绍 PHP 正则表达式的基础知识。

基础概念
正则表达式语法

PHP 正则表达式是一个模式,根据该模式匹配字符串。模式可以包括普通字符和特殊字符。普通字符匹配其本身,而特殊字符用于具有特殊含义的目的。

正则表达式函数

在 PHP 中,有几个函数用于使用和操作正则表达式,包括:

  • preg_match():在字符串中搜索匹配给定正则表达式的第一个出现位置。
  • preg_match_all():在字符串中搜索匹配给定正则表达式的所有出现位置。
  • preg_replace():搜索字符串中与正则表达式匹配的内容,并用新字符串替换匹配到的内容。
  • preg_split():使用正则表达式分隔字符串。
正则表达式元字符

正则表达式中的特殊字符称为元字符。以下是 PHP 正则表达式中的一些元字符:

| 元字符 | 描述 | | ------------ | ------------------------------------------------------------ | | ^ | 匹配输入字符串的开始位置。 | | $ | 匹配输入字符串的结束位置。 | | . | 匹配除换行符之外的任意字符。如果希望匹配包括换行符的任意字符,请使用 s 标记。 | | * | 匹配前面的子表达式零次或多次。 | | + | 匹配前面的子表达式一次或多次。 | | ? | 匹配前面的子表达式零次或一次。 | | {n} | 匹配前面的子表达式恰好 n 次。 | | {n,} | 匹配前面的子表达式至少 n 次。 | | {n,m} | 匹配前面的子表达式至少 n 次,但不超过 m 次。 | | [...] | 匹配方括号中包含的任意字符。 | | [^...] | 匹配方括号中未包含的任意字符。 | | \ | 转义字符,用于匹配元字符。 | | | | 或运算符,匹配操作符左右两边任意一个表达式。 | | (...) | 捕获子表达式。我们可以使用 preg_match() 函数来从匹配到的字符串中提取子表达式。 | | (?:...) | 匹配子表达式,但不捕获该匹配项。 | | (?=...) | 正向预查,匹配后面符合某个表达式的字符串。 | | (?!...) | 负向预查,匹配后面不符合某个表达式的字符串。 | | (?<=...) | 正向回顾后发,匹配前面符合某个表达式的字符串。 | | (?<!...) | 负向回顾后发,匹配前面不符合某个表达式的字符串。 |

正则表达式模式修饰符

在 PHP 中,可以使用模式修饰符来指定搜索或替换的方式。修饰符是放置在正则表达式模式末尾的字符。常见的模式修饰符包括:

| 修饰符 | 描述 | | ------ | ------------------------------------------------------------ | | i | 执行不区分大小写的匹配。 | | m | 多行模式,使函数把字符串视为多行。 | | s | 单行模式,使 . 元字符匹配包括换行符在内的所有字符。 | | x | 忽略模式中的空白符,并可以在模式中使用注释。 | | e | 将替换字符串作为代码执行。该模式已经弃用。请不要在新代码中使用该模式。 | | u | 用于处理多字节字符时,将正则表达式视为 UTF-8 字符串。 |

实例

我们来看一些实例:

匹配邮箱地址
$email = 'test@example.com';

if (preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/', $email)) {
    echo "Match found!";
} else {
    echo "Match not found.";
}
匹配中文字符
$str = 'Hello,世界!';

if (preg_match('/[\x{4e00}-\x{9fa5}]/u', $str)) {
    echo "Match found!";
} else {
    echo "Match not found.";
}
替换 URL
$text = 'Visit our website: http://www.example.com/';

$pattern = '/http:\/\/[\w\.\/]+/';

$replacement = '<a href="$0">$0</a>';

echo preg_replace($pattern, $replacement, $text);
分割字符串
$str = "Hello, world! How are you?";

print_r(preg_split("/[\s,!?]/", $str));
结论

PHP 正则表达式是一个强大的工具,可用于匹配和搜索字符串模式。通过使用元字符和模式修饰符,我们可以创建高度精细的正则表达式。由于正则表达式可以在多个环境中使用,因此值得投入时间和精力来熟悉和掌握它们。