PHP 正则表达式2024 年 8 月 29 日 | 阅读 6 分钟 正则表达式通常被称为 regex。它们不过是一个模式或一系列字符,用于描述文本字符串中的特殊搜索模式。 正则表达式允许你在另一个字符串中搜索特定的字符串。我们甚至可以将一个字符串替换为另一个字符串,还可以将一个字符串拆分成多个块。它们使用算术运算符(+、-、^)来创建复杂的表达式。 默认情况下,正则表达式是区分大小写的。 正则表达式的优势和用途正则表达式几乎在当前应用程序编程的每个地方都有使用。下面列出了一些正则表达式的优势和用途。 - 正则表达式帮助程序员验证文本字符串。
- 它提供了一个强大的工具来分析和搜索模式,以及修改文本字符串。
- 通过使用 regex 函数,可以为识别模式提供简单易行的解决方案。
- Regexes 有助于创建识别标签的 HTML 模板系统。
- Regexes 广泛用于浏览器检测、表单验证、垃圾邮件过滤和密码强度检查。
- 它有助于用户输入验证测试,例如电子邮件地址、手机号码和 IP 地址。
- 它有助于根据搜索结果或输入突出显示文件中的特殊关键字。
- 元字符允许我们创建更复杂的模式。
你可以通过应用正则表达式的一些基本规则来创建复杂的搜索模式。许多算术运算符(+、-、^)也由正则表达式使用来创建复杂的模式。 正则表达式中的运算符运算符 | 描述 |
---|
^ | 它表示字符串的开头。 | $ | 它表示字符串的结尾。 | . | 它代表任何单个字符。 | () | 它表示一组表达式。 | [] | 它查找字符范围,例如,[abc] 表示 a、b 或 c。 | [^] | 它查找不在范围内的字符,例如,[^xyz] 表示非 x、y 或 z。 | - | 它查找元素之间的范围,例如,[a-z] 表示从 a 到 z。 | | | 它是一个逻辑 OR 运算符,用于元素之间。例如,a|b,表示 a 或 b。 | ? | 它表示前面字符或元素范围的零次或一次出现。 | * | 它表示前面字符或元素范围的零次或多次出现。 | + | 它表示前面字符或元素范围的零次或多次出现。 | {n} | 它表示前面字符范围至少出现 n 次。例如 - n{3} | {n, } | 它表示至少出现 n 次,但不超过 m 次,例如,n{2,5} 表示 n 出现 2 到 5 次。 | {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 Regexp 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 非常相似。POSIX 语法可以与 Perl 风格的正则表达式函数互换使用。POSIX 部分引入的量词也可以在 PERL 风格的正则表达式中使用。 元字符元字符是后跟反斜杠的字母字符,它赋予该组合特殊的含义。 例如 - '\d' 元字符可用于搜索大笔金额:/([\d]+)000/。这里 /d 将搜索数字字符的字符串。 下面是可以用于 PERL 风格正则表达式的元字符列表: Character | 描述 |
---|
. | 匹配单个字符 | \s | 它匹配空格字符,如空格、换行符、制表符。 | \S | 非空白字符 | \d | 它匹配 0 到 9 的任何数字。 | \D | 匹配非数字字符。 | \w | 匹配单词字符,如 - a-z、A-Z、0-9、_ | \W | 匹配非单词字符。 | [aeiou] | 它匹配给定集合中的任何单个字符。 | [^aeiou] | 它匹配给定集合以外的任何单个字符。 | (foo|baz|bar) | 匹配指定选项中的任何一个。 |
修饰符有几种修饰符可用,它们使正则表达式的工作更加轻松。例如 - 区分大小写或在多行中搜索等。 下面是 PERL 风格正则表达式中使用的修饰符列表: Character | 描述 |
---|
i | 使搜索不区分大小写 | m | 它指定如果字符串包含回车符或换行符,则 $ 和 ^ 运算符将匹配换行边界而不是字符串边界。 | o | 仅评估一次表达式 | s | 它允许使用 .(点) 来匹配换行符。 | x | 此修饰符允许我们在表达式中使用空格以提高清晰度。 | g | 它全局搜索所有匹配项。 | cg | 它允许搜索在全局匹配失败后继续进行。 |
PHP Regexp POSIX 函数PHP 目前提供七个函数来使用 POSIX 风格的正则表达式搜索字符串: 函数 | 描述 |
---|
preg_match() | 此函数在字符串中搜索模式,如果模式存在则返回true,否则返回false。 | | preg_match_all() | 此函数匹配字符串中模式的所有出现。 | | preg_replace() | preg_replace() 函数类似于 ereg_replace() 函数,除了正则表达式可以用于搜索和替换。 | | preg_split() | 此函数的工作方式与 split() 函数完全相同,除了它接受正则表达式作为模式的输入参数。主要它通过正则表达式分割字符串。 | | preg_grep() | preg_grep() 函数查找 input_array 的所有元素,并返回与 regexp(关系表达式)模式匹配的数组元素。 | | preg_quote() | 引用正则表达式字符。 | |
|