PHP 手册
后退 |  | 前进

# preg_match

(PHP 3 >= 3.0.9, PHP 4, PHP 5)

preg_match -- 进行正则表达式匹配

## 说明

int preg_match ( string pattern, string subject [, array matches [, int flags]] )

在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。

如果提供了 matches，则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本，$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本，以此类推。

flags 可以是下列标记：

PREG_OFFSET_CAPTURE

  如果设定本标记，对每个出现的匹配结果也同时返回其附属的字符串偏移量。注意这改变了返回的数组的值，使其中的每个单元也是一个数组，其中第一项为匹配字符串，第二项为其偏移量。本标记自 PHP 4.3.0 起可用。

flags 参数自 PHP 4.3.0 起可用。

preg_match() 返回 pattern 所匹配的次数。要么是 0 次（没有匹配）或 1 次，因为 preg_match() 在第一次匹配之后将停止搜索。preg_match_all() 则相反，会一直搜索到 subject 的结尾处。如果出错 preg_match() 返回 `FALSE`。

> 提示: 如果只想查看一个字符串是否包含在另一个字符串中，不要用 preg_match()。可以用 strpos() 或 strstr() 替代，要快得多。

例子 1. 在文本中搜索“php”

`<?php // 模式定界符后面的 "i" 表示不区分大小写字母的搜索 if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } ?>`

例子 2. 搜索单词“web”

`<?php /* 模式中的 \b 表示单词的边界，因此只有独立的 "web" 单词会被匹配， * 而不会匹配例如 "webbing" 或 "cobweb" 中的一部分 */ if (preg_match ("/\bweb\b/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } if (preg_match ("/\bweb\b/i", "PHP is the website scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } ?>`

例子 3. 从 URL 中取出域名

`<?php // 从 URL 中取得主机名 preg_match("/^(http:\/\/)?([^\/]+)/i", "http://www.php.net/index.html", $matches); $host = $matches[2]; // 从主机名中取得后面两段 preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); echo "domain name is: {$matches[0]}\n"; ?>`

本例将输出：

    domain name is: php.net

参见 preg_match_all()，preg_replace() 和 preg_split()。

后退 | 起点 | 前进
preg_match_all | 上一级 | preg_quote