说明
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。
例子 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"; ?>
|
本例将输出:
|
参见 preg_match_all(),preg_replace()
和 preg_split()。