PHP 正则表达式(PCRE)


PHP正则表达式(PCRE)

什么是正则表达式?

正则表达式(regular expression)是一种字符串匹配模式, 是用来进行字符串匹配和搜索的一种工具。它可以让程序员通过给定的规则,来匹配符合某一模式的字符串。正则表达式广泛应用于文本编辑器、搜索引擎、替换工具等各种应用场景。

PCRE是什么?

PCRE (Perl Compatible Regular Expressions) 是一个由 Philip Hazel 开发的正则表达式库。PCRE 在 C 和 PHP 中广泛使用,是用于处理正则表达式的性能较高的库。PCRE 不仅支持 Perl 的语法,还增加了一些独有的语法特性。

PHP默认使用PCRE进行正则表达式匹配,可以支持匹配UTF-8编码的字符串,既可以进行正则表达式匹配、也可以进行正则表达式替换等操作。

PCRE的基本语法

PCRE的基本语法是由一些普通字符和特殊字符组成,其中特殊字符有特殊的含义,在匹配时需要用到这些特殊字符。

  1. 普通字符

普通字符是指除了PCRE中预定义的特殊字符以外的其他字符。

在大多数情况下,普通字符代表自身。例如,正则表达式 hello 匹配 "hello" 这个字符串。

  1. 特殊字符

^ 匹配行首的第一个字符

$ 匹配行尾的最后一个字符

. 匹配除换行符以外的任何字符

[...] 匹配方括号中的任何一个字符

[^...] 匹配不在方括号中的任何一个字符

* 匹配前面出现的字符的零个或者多个

+ 匹配前面出现的字符的一个或者多个

? 匹配前面出现的字符的零个或一个

\ 转义字符

( ) 分组字符

{ } 量词字符

\d 匹配任何数字

\w 匹配任何单词字符

\s 匹配任何空白字符

\t 匹配制表符

\n 匹配换行符

\r 匹配回车符

| 或者

PCRE函数

PHP中提供了一系列的PCRE相关函数,可以用于正则表达式的操作。比较常用的函数有:

  • preg_match($pattern, $subject): 用$pattern匹配$subject字符串,返回第一次匹配的结果,如果匹配多次,则只返回第一个匹配结果。

  • preg_match_all($pattern, $subject): 匹配所有符合$pattern的字符串,返回一个多维数组。

  • preg_match_replace($pattern, $replacement, $subject): 用$replacement替换匹配到的$subject字符串。

  • preg_split($pattern, $subject): 用$pattern把$subject字符串切割成一个数组。

PCRE使用实例

以下是一些常用的正则表达式示例:

  1. 匹配email地址
$email = 'hello@example.com';
$pattern = "/^[a-z0-9]+@[a-z0-9]+\.[a-z]+$/i";
if (preg_match($pattern, $email)) {
  echo "匹配成功";
} else {
  echo "匹配失败";
}
  1. 匹配URL地址
$url = "http://www.example.com";
$pattern ="/^(http|https):\/\/([a-z0-9-.]+\.[a-z]{2,})(:\d+)?(\/\S*)?$/i";
if (preg_match($pattern, $url)) {
  echo "匹配成功";
} else {
  echo "匹配失败";
}
  1. 匹配手机号
$phone = '12345678900';
$pattern = "/^1[3456789]\d{9}$/i";
if (preg_match($pattern, $phone)) {
  echo "匹配成功";
} else {
  echo "匹配失败";
}

总结

PCRE在PHP中使用十分方便,掌握正则表达式的基本语法和常用的函数,可以帮助我们更加高效地处理文本数据,提高工作效率。同时,使用正则表达式有时候需要避免一些细节问题,需要小心谨慎。