Php 简明教程

PHP - Regular Expressions

正则表达式本身不过是字符的序列或模式。它们为模式匹配功能提供基础。

使用正则表达式,可以在另一个字符串中搜索特定字符串,可以用另一个字符串替换一个字符串,还可以将一个字符串拆分成许多块。

PHP 提供特定于两组正则表达式函数的函数,每个函数都对应一定类型的正则表达式。您可以根据您的喜好使用其中任何一个。

  1. POSIX Regular Expressions

  2. PERL Style Regular Expressions

POSIX Regular Expressions

POSIX 正则表达式的结构与典型算术表达式的结构并无不同:将各种元素(运算符)组合起来以形成更复杂的表达式。

最简单的正则表达式是匹配单个字符的正则表达式,如 g,在诸如 g、haggle 或 bag 等字符串中。

让我们对 POSIX 正则表达式中使用的几个概念进行解释。之后,我们将向您介绍正则表达式相关函数。

Brackets

括号 ([]) 在正则表达式中使用时具有特殊的含义。它们用于查找字符范围。

Sr.No

Expression & Description

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 的任何小写字母。

Quantifiers

用方括号括起来的字符序列和单个字符出现的频率或位置可以用特殊字符表示。每个特殊字符都有一个特定含义。+、*、?、{int. range} 和 $ 标志都出现在字符序列之后。

Sr.No

Expression & Description

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 开头的任何字符串。

Examples

以下示例将阐明您对匹配字符的概念。

Sr.No

Expression & Description

1

[^a-zA-Z] 它匹配不包含从 a 到 z 和 A 到 Z 的任何字符的任何字符串。

2

p.p 它匹配包含 p、紧接着任何字符以及再紧接着另一个 p 的任何字符串。

3

^.{2}$ 匹配包含正好两个字符的任何字符串。

4

&lt;b&gt;(. )</b>*匹配以 <b> 和 </b> 括起的任何字符串。

5

p(hp) *它匹配包含一个 p,后跟零个或多个 php 序列的任何字符串。

Predefined Character Ranges

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

Sr.No

Expression & Description

1

[id=":alpha:"] 它匹配包含字母 aA 到 zZ 的任何字符串。

2

[id=":digit:"] 它匹配包含数字数字 0 到 9 的任何字符串。

3

[id=":alnum:"] 它匹配包含字母数字 aA 到 zZ 和 0 到 9 的任何字符串。

4

[id=":space:"] 它匹配包含空格的任何字符串。

PHP’s Regexp POSIX Functions

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

Sr.No

Function & Description

1

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

2

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

3

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

4

eregi_replace() eregi_replace() 函数的操作与 ereg_replace() 完全相同,但对 pattern 在字符串中的搜索不区分大小写。

5

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

6

spliti() spliti() 函数的操作与其同级 split() 完全相同,但它不区分大小写。

7

sql_regcase() sql_regcase() 函数可被视为一个实用程序函数,将输入参数字符串中的每个字符转换为包含两个字符的括号表达式。

PERL Style Regular Expressions

Perl 风格的正则表达式类似于 POSIX 对应表达式。POSIX 语法几乎可以与 Perl 风格的正则表达式函数互换使用。事实上,你可以使用先前 POSIX 部分中介绍的任何限定符。

让我们对 PERL 正则表达式中使用的一些概念进行说明。之后,我们会向你介绍与正则表达式相关的函数。

Meta characters

元字符只是一个字母字符,前置反斜杠,作用是给组合赋予一个特殊含义。

例如,你可以使用“\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

Modifiers

有几个修饰符可用,它们可以使你和正则表达式的合作更容易,比如区分大小写、在多行中搜索等。

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’s Regexp PERL Compatible Functions

PHP 提供以下函数,用于使用 Perl 兼容正则表达式搜索字符串 −

Sr.No

Function & Description

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() 函数搜索 input_array 的所有元素,返回与 regexp 模式匹配的所有元素。

6

preg_ quote() 引用正则表达式字符