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的基本语法是由一些普通字符和特殊字符组成,其中特殊字符有特殊的含义,在匹配时需要用到这些特殊字符。
- 普通字符
普通字符是指除了PCRE中预定义的特殊字符以外的其他字符。
在大多数情况下,普通字符代表自身。例如,正则表达式 hello
匹配 "hello"
这个字符串。
- 特殊字符
^
匹配行首的第一个字符
$
匹配行尾的最后一个字符
.
匹配除换行符以外的任何字符
[...]
匹配方括号中的任何一个字符
[^...]
匹配不在方括号中的任何一个字符
*
匹配前面出现的字符的零个或者多个
+
匹配前面出现的字符的一个或者多个
?
匹配前面出现的字符的零个或一个
\
转义字符
( )
分组字符
{ }
量词字符
\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使用实例
以下是一些常用的正则表达式示例:
- 匹配email地址
$email = 'hello@example.com';
$pattern = "/^[a-z0-9]+@[a-z0-9]+\.[a-z]+$/i";
if (preg_match($pattern, $email)) {
echo "匹配成功";
} else {
echo "匹配失败";
}
- 匹配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 "匹配失败";
}
- 匹配手机号
$phone = '12345678900';
$pattern = "/^1[3456789]\d{9}$/i";
if (preg_match($pattern, $phone)) {
echo "匹配成功";
} else {
echo "匹配失败";
}
总结
PCRE在PHP中使用十分方便,掌握正则表达式的基本语法和常用的函数,可以帮助我们更加高效地处理文本数据,提高工作效率。同时,使用正则表达式有时候需要避免一些细节问题,需要小心谨慎。