PHP preg_match() 函数
PHP preg_match() 函数用于执行一个正则表达式匹配
函数原型
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
搜索 subject 与 pattern 给定的正则表达式的一个匹配
参数
参数 | 说明 |
---|---|
$pattern | 要搜索的模式,字符串形式 |
$subject | 要搜索的字符串 |
$matches | 如果提供了参数 matches,它将被填充为搜索结果 $matches[0] 将包含完整模式匹配到的文本 $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推 |
$flags | flags 可以被设置为以下标记值: PREG_OFFSET_CAPTURE: 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的) 这会改变填充到 matches 参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第 1 个元素是该匹配字符串 在目标字符串 subject 中的偏移量 |
$offset | 通常,搜索从目标字符串的开始位置开始 可选参数 offset 用于 指定从目标字符串的某个未知开始搜索(单位是字节) |
返回值
返回 pattern 的匹配次数:
- 0 次 :不匹配
- 1 次 :匹配
如果发生错误 preg_match() 返回 FALSE
因为 preg_match() 在第一次匹配后将会停止搜索
preg_match_all() 不同于此,它会一直搜索 subject 直到到达结尾
范例
下面的代码查找文本字符串 "php"
<?php //模式分隔符后的 "i" 标记这是一个大小写不敏感的搜索 if (preg_match("/php/i", "PHP is the web scripting language of choice.")) { echo "查找到匹配的字符串 php"; } else { echo "未发现匹配的字符串 php"; }
运行以上 PHP 脚本,输出结果如下
查找到匹配的字符串 php
范例 2
查找单词 word
<?php /* 模式中的\b标记一个单词边界,所以只有独立的单词 "web" 会被匹配 * 而不会匹配单词的部分内容比如"webbing" 或 "cobweb" */ $txt1 = "PHP is the web scripting language of choice."; $txt2 = "PHP is the website scripting language of choice."; if (preg_match("/\bweb\b/i", $txt1)) { echo "查找到匹配的字符串\n"; } else { echo "未发现匹配的字符串\n"; } if (preg_match("/\bweb\b/i", $txt2)) { echo "查找到匹配的字符串\n"; } else { echo "未发现匹配的字符串\n"; }
运行以上 PHP 范例,输出结果如下
查找到匹配的字符串 未发现匹配的字符串
范例 3
获取 URL 中的域名
<?php // 从URL中获取主机名称 $url = "https://www.twle.cn/yufei/php/"; preg_match('@^(?:https://)?([^/]+)@i', $url, $matches); $host = $matches[1]; // 获取主机名称的后面两部分 preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "domain name is: {$matches[0]}\n";
运行以上 PHP 范例,输出结果如下
domain name is: twle.cn
范例 4
使用命名子组
<?php $str = 'foobar: 2008'; preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches); print_r($matches);
运行以上 PHP 范例,输出结果如下
Array ( [0] => foobar: 2008 [name] => foobar [1] => foobar [digit] => 2008 [2] => 2008 )