PHP 正则表达式
正则表达式通常被称为 正则 。它们仅仅是一种模式或一系列字符,用来描述特殊的文本搜索模式。
正则表达式允许您在另一个字符串中搜索特定字符串。甚至还可以用另一个字符串替换一个字符串,并将一个字符串拆分成多个块。它们使用算术运算符(+,-,^)来创建复杂的表达式。
默认情况下,正则表达式是 区分大小写 的。
正则表达式的优势和用途
正则表达式在当前应用程序编程中几乎无处不在。下面是一些正则表达式的优势和用途:
- 正则表达式帮助程序员验证文本字符串。
- 它提供了一个强大的工具,用于分析和搜索模式以及修改文本字符串。
- 通过使用正则表达式函数,可以提供简单而易用的解决方案来识别模式。
- 正则表达式对于创建识别标签的HTML模板系统非常有用。
- 正则表达式广泛用于浏览器检测、表单验证、垃圾邮件过滤和密码强度检查。
- 在用户输入验证测试中,如电子邮件地址、手机号码和IP地址,正则表达式非常有帮助。
- 根据搜索结果或输入,在文件中突出显示特殊关键字。
- 元字符允许我们创建更复杂的模式。
通过应用正则表达式的一些基本规则,可以创建复杂的搜索模式。正则表达式还使用许多算术运算符(+、-、^)来创建复杂的模式。
正则表达式中的运算符
运算符 | 描述 |
---|---|
^ |
它表示字符串的开头。 |
$ |
它表示字符串的结尾。 |
. |
它表示任意单个字符。 |
() |
它表示一组表达式。 |
[] |
它找到一定范围内的字符, 例如 ,[abc] 表示a、b或c。 |
[^] |
它找到不在范围内的字符, 例如 ,[^xyz] 表示不是x、y或z。 |
- |
它找到两个元素之间的范围, 例如 ,[a-z] 表示从a到z。 |
| |
这是一个逻辑”或”运算符,用于元素之间。 例如 ,a|b ,表示要么是a,要么是b。 |
? |
它表示前置字符或元素的零个或一个。 |
* |
它表示前置字符或元素的零个或多个。 |
+ |
它表示前置字符或元素的一个或多个。 |
{n} |
它表示前置字符的至少n次。例如 – n{3} |
{n, } |
它表示至少n次,但不超过m次。例如,n{2,5}表示2到5个n。 |
{n, m} |
它表示至少n次,但不超过m次。例如 – n{3,6}表示 n出现3到6次。 |
\ |
它表示转义字符。 |
正则表达式中的特殊字符类别
特殊字符 | 描述 |
---|---|
\n |
表示换行符。 |
\r |
表示回车。 |
\t |
表示制表符。 |
\v |
表示垂直制表符。 |
\f |
表示换页符。 |
\xxx |
它代表一个八进制字符。 |
\xxh |
它表示十六进制字符hh。 |
PHP提供了两组正则表达式函数:
- POSIX正则表达式
- PERL风格的正则表达式
POSIX正则表达式
POSIX正则表达式的结构类似于典型的算术表达式:几个操作符/元素被组合在一起形成更复杂的表达式。
最简单的正则表达式是匹配字符串中的单个字符。 例如 – “g” 在toggle或cage字符串中。让我们介绍一些在POSIX正则表达式中使用的概念:
方括号
方括号 [] 在正则表达式中有特殊意义。它们用于找出其中的字符范围。
表达式 | 描述 |
---|---|
[0-9] |
匹配任何十进制数字 0 到 9。 |
[a-z] |
匹配任何小写字母 a 到 z。 |
[A-Z] |
匹配任何大写字母 A 到 Z。 |
[a-Z] |
匹配任何从小写字母 a 到大写字母 Z 的字符。 |
上述范围是常用的。根据需要,您可以使用范围值,例如 [0-6] 以匹配任何从 0 到 6 的十进制数字。
量词符
特殊字符可以表示括号字符序列和单个字符的位置。每个特殊字符都有特定的含义。给定的符号+,*,?, $,和{int range}标记都遵循字符序列。
表达式 | 描述 |
---|---|
p+ |
它匹配包含至少一个p的任何字符串。 |
p* |
它匹配包含一个或多个p的任何字符串。 |
p? |
它匹配具有零个或一个p的任何字符串。 |
p{N} |
它匹配具有N个p的序列的任何字符串。 |
p{2,3} |
它匹配包含两个或三个p的字符串。 |
p{2, } |
它匹配至少包含两个p的字符串。 |
p$ |
它匹配以p结尾的字符串。 |
^p |
它匹配以p开头的字符串。 |
PHP正则表达式 POSIX函数
PHP提供了七个函数,使用POSIX风格的正则表达式在字符串中搜索 –
函数 | 描述 |
---|---|
ereg() | 它在一个字符串中搜索一个匹配模式,并且如果模式匹配则返回true,否则返回false。 |
ereg_replace() | 它在字符串中搜索字符串模式,并将匹配的文本替换为替换字符串。 |
eregi() | 它在字符串中搜索模式,并返回匹配字符串的长度,如果找到则返回false。它是一个 大小写不敏感 的函数。 |
eregi_replace() | 此函数与 ereg_replace() 函数相同。唯一的区别是,此函数的模式搜索是大小写不敏感的。 |
split() | split()函数将字符串分割成数组。 |
spliti() | 它与split()函数类似,同样可以通过正则表达式将字符串分割成数组。 |
Sql_regcase() | 它创建一个用于不区分大小写的匹配的正则表达式,并返回一个可以匹配字符串的有效正则表达式。 |
注意:上述函数在PHP 5.3.0中已被弃用,在PHP 7.0.0中已被移除。
PERL风格的正则表达式
Perl风格的正则表达式与POSIX非常相似。可以互换使用Perl风格的正则表达式函数。在PERL风格的正则表达式中,也可以使用在POSIX部分引入的量词。
元字符
元字符是一个以斜杠跟在字母后面的字符,给该组合赋予了特殊的含义。
例如 - “\d” 元字符可以用来搜索大金额:/([\d]+)000/
。这里\d将搜索由数字字符组成的字符串。
下面是可以在PERL样式的正则表达式中使用的元字符列表 –
字符 | 描述 |
---|---|
. | 匹配一个字符 |
\s | 匹配空白字符,如空格、换行、制表符。 |
\S | 非空白字符 |
\d | 匹配0到9之间的任何数字。 |
\D | 匹配非数字字符。 |
\w | 匹配单词字符,如小写字母a-z,大写字母A-Z,数字0-9和下划线。 |
\W | 匹配非单词字符。 |
[aeiou] | 匹配给定集合中的任何单个字符。 |
[^aeiou] | 匹配除给定集合之外的任何单个字符。 |
修饰符
有几个可用的修饰符,可以使使用正则表达式的工作变得更容易。例如 – 区分大小写或在多行中搜索等。
以下是PERL样式正则表达式中使用的修饰符列表 –
字符 | 描述 |
---|---|
i | 使搜索不区分大小写 |
m | 指定如果字符串包含回车符或换行符,则$和^运算符将与换行边界匹配,而不是字符串边界 |
o | 仅对表达式进行一次评估 |
s | 它允许使用 .(点)匹配换行符。 |
x | 这个修饰符允许我们在表达式中使用空白字符以增加清晰度。 |
g | 它全局搜索所有匹配。 |
cg | 即使全局匹配失败,它也允许搜索继续进行。 |
PHP正则表达式POSIX函数
PHP目前提供了七个函数来使用POSIX风格的正则表达式搜索字符串 –
函数 | 描述 |
---|---|
preg_match() | 这个函数在字符串中搜索模式并返回< strong> true **,如果模式存在返回< strong> false **。 |
preg_match_all() | 这个函数匹配字符串中的所有出现的模式。 |
preg_replace() | preg_replace()函数类似于ereg_replace()函数,只是正则表达式可以用于搜索和替换。 |
preg_split() | 这个函数与split()函数完全相同,只是接受正则表达式作为模式输入参数。主要通过正则表达式将字符串分割。 |
preg_grep() | preg_grep()函数在输入数组中查找所有符合正则表达式(关系表达式)模式的数组元素。 |
preg_quote() | 引用正则表达式字符。 |