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>

它匹配包含在<b>和</b>之间的任何字符串。

5

p(hp)*

它匹配包含 p 后跟零个或多个 php 序列的任何字符串。

预定义字符范围

为了方便您的编程,提供了几个预定义的字符范围,也称为字符类。字符类指定整个字符范围,例如,字母表或整数集 -

序号 表达式和描述
1

[[:alpha:]]

它匹配包含字母字符 aA 到 zZ 的任何字符串。

2

[[:digit:]]

它匹配包含数字 0 到 9 的任何字符串。

3

[[:alnum:]]

它匹配包含字母数字字符 aA 到 zZ 和 0 到 9 的任何字符串。

4

[[:space:]]

它匹配包含空格的任何字符串。

PHP 的正则表达式 POSIX 函数

PHP 目前提供了七个函数,用于使用 POSIX 风格的正则表达式搜索字符串:

序号 函数及描述
1 ereg()

ereg() 函数在由 string 指定的字符串中搜索由 pattern 指定的字符串,如果找到该模式则返回 true,否则返回 false。

2 ereg_replace()

ereg_replace() 函数搜索由 pattern 指定的字符串,如果找到则用 replacement 替换 pattern。

3 eregi()

eregi() 函数在由 string 指定的字符串中搜索由 pattern 指定的字符串。搜索不区分大小写。

4 eregi_replace()

eregi_replace() 函数的工作方式与 ereg_replace() 完全相同,只是在 string 中搜索 pattern 时不区分大小写。

5 split()

split() 函数将一个字符串分成多个元素,每个元素的边界基于 pattern 在 string 中的出现位置。

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() 函数在 string 中搜索 pattern,如果 pattern 存在则返回 true,否则返回 false。

2 preg_match_all()

preg_match_all() 函数匹配 string 中 pattern 的所有出现。

3 preg_replace()

preg_replace() 函数的工作方式与 ereg_replace() 完全相同,只是可以在 pattern 和 replacement 输入参数中使用正则表达式。

4 preg_split()

preg_split() 函数的工作方式与 split() 完全相同,只是接受正则表达式作为 pattern 的输入参数。

5 preg_grep()

preg_grep() 函数搜索 input_array 的所有元素,并返回与正则表达式 pattern 匹配的所有元素。

6 preg_quote()

引用正则表达式字符

广告