PHP 正则表达式
正则表达式本身就是一个字符序列或模式。它们为模式匹配功能提供了基础。
使用正则表达式,您可以在一个字符串中搜索另一个字符串,将一个字符串替换为另一个字符串,或将一个字符串拆分成多个块。
PHP提供了针对两组正则表达式函数的特定函数,每组函数对应一种特定类型的正则表达式。您可以根据个人喜好使用其中任何一组。
- POSIX正则表达式
- PERL风格正则表达式
POSIX正则表达式
POSIX正则表达式的结构与典型算术表达式相似:各种元素(操作符)组合形成更复杂的表达式。
最简单的正则表达式是匹配一个单个字符(例如g),在字符串(如g、haggle或bag)中匹配。
现在,我们将解释一些在POSIX正则表达式中使用的概念。然后,我们将向您介绍与正则表达式相关的函数。
方括号
方括号([]
)在正则表达式的上下文中具有特殊的含义。它们用于查找一系列字符。
序号 | 表达式和描述 |
---|---|
1 | [0-9] 匹配0到9之间的任何十进制数字。 |
2 | [a-z] 匹配小写字母a到小写字母z之间的任何字符。 |
3 | [A-Z] 匹配大写字母A到大写字母Z之间的任何字符。 |
4 | [a-Z] 匹配小写字母a到大写字母Z之间的任何字符。 |
上面显示的范围是一般的;你也可以使用范围[0-3]
来匹配从0到3的任何十进制数字,或者范围[b-v]
来匹配从b到v的任何小写字符。
定量词
括号字符序列和单个字符的频率或位置可以用特殊字符表示。每个具有特定含义的特殊字符。+、*、?、{int. range}
和$
标志都遵循字符序列。
序号 | 表达式与描述 |
---|---|
1 | p+ 匹配至少包含一个p的任何字符串。 |
2 | p* 匹配包含零个或多个p的任何字符串。 |
3 | p? 匹配包含零个或一个p的任何字符串。 |
4 | p{N} 匹配包含 N 个p的任何字符串。 |
5 | p{2,3} 匹配包含两个或三个p的任何字符串。 |
6 | p{2, } 匹配包含至少两个p的任何字符串。 |
7 | p$ 匹配以p结尾的任何字符串。 |
8 | ^p 匹配以p开头的任何字符串。 |
示例
以下示例将帮助你理解字符匹配的概念。
序号 | 表达式和描述 |
---|---|
1 | [^a-zA-Z] 它匹配任何不包含从a到z和A到Z的字符范围的字符串。 |
2 | p.p 它匹配任何包含p,后跟任何字符,再跟另一个p的字符串。 |
3 | ^.{2}$ 它匹配任何包含正好两个字符的字符串。 |
4 | <b>(.*)</b> 它匹配任何在和之间的字符串。 |
5 | p(hp)* 它匹配任何包含一个p,后面跟零个或多个php序列的字符串。 |
预定义字符范围
为了方便编程,有几个预定义的字符范围,也被称为字符类,是可用的。字符类指定了一整个字符范围,例如字母表或整数集合。
序号 | 表达式和描述 |
---|---|
1 | [[:alpha:]] 它匹配包含字母字符a到z的任何字符串。 |
2 | [[:digit:]] 它匹配包含数字0到9的任何字符串。 |
3 | [[:alnum:]] 它匹配包含字母字符a到z和数字0到9的任何字符串。 |
4 | [[:space:]] 它匹配包含空格的任何字符串。 |
PHP的正则表达式POSIX函数
PHP目前提供了七个使用POSIX风格正则表达式搜索字符串的函数 –
序号 | 功能与描述 |
---|---|
1 | ereg() ereg()函数在字符串中查找指定的模式,如果找到模式则返回true,否则返回false。 |
2 | ereg_replace() ereg_replace()函数在字符串中查找指定的模式,并使用替换字符串替换找到的模式。 |
3 | eregi() eregi()函数在字符串中搜索指定的模式,搜索时不区分大小写。 |
4 | eregi_replace() eregi_replace()函数与ereg_replace()函数相同,只是在搜索模式时不区分大小写。 |
5 | split() split()函数将字符串根据指定的模式进行切割,每个切割的元素都是以模式为边界。 |
6 | spliti() spliti()函数与split()函数的操作方式完全相同,只是不区分大小写。 |
7 | sql_regcase() sql_regcase()函数将输入参数字符串中的每个字符转换为包含两个字符的括号表达式。 |
Perl风格的正则表达式
Perl风格的正则表达式与其POSIX对应物相似。几乎可以互换使用POSIX语法和Perl风格的正则表达式函数。实际上,你可以使用在前面POSIX部分介绍的任何量词。
让我们对用于Perl正则表达式的一些概念进行解释。之后我们将为您介绍与正则表达式相关的函数。
元字符
元字符是以反斜杠为前缀的字母字符,用于给组合提供特殊含义。
例如,您可以使用’\d’元字符搜索大额货币金额: /([\d]+)000/ ,这里 \d 将搜索任意的数字字符字符串。
以下是可以在Perl风格的正则表达式中使用的元字符列表。
Character Description
. a single character
\s a whitespace character (space, tab, newline)
\S non-whitespace character
\d a digit (0-9)
\D a non-digit
\w a word character (a-z, A-Z, 0-9, _)
\W a non-word character
[aeiou] matches a single character in the given set
[^aeiou] matches a single character outside the given set
(foo|bar|baz) matches any of the alternatives specified
修改器
有几个可用的修改器可以使您在正则表达式中更轻松地工作,如大小写敏感、在多行中搜索等。
Modifier Description
i Makes the match case insensitive
m Specifies that if the string has newline or carriage
return characters, the ^ and $ operators will now
match against a newline boundary, instead of a
string boundary
o Evaluates the expression only once
s Allows use of . to match a newline character
x Allows you to use white space in the expression for clarity
g Globally finds all matches
cg Allows a search to continue even after a global match fails
PHP的正则表达式Perl兼容函数
PHP提供以下函数,用于使用Perl兼容的正则表达式搜索字符串 –
序号 | 函数及描述 |
---|---|
1 | preg_match() preg_match() 函数在字符串中搜索模式,如果模式存在则返回true,否则返回false。 |
2 | preg_match_all() preg_match_all() 函数在字符串中匹配所有出现的模式。 |
3 | preg_replace() preg_replace() 函数的用法与 ereg_replace() 相同,只是正则表达式可以用在模式和替换输入参数中。 |
4 | preg_split() preg_split() 函数的用法与 split() 完全相同,只是正则表达式可以用作模式的输入参数。 |
5 | preg_grep() preg_grep() 函数在输入数组的所有元素中搜索与正则表达式模式匹配的所有元素。 |
6 | preg_quote() 引用正则表达式字符 |