PHP函数preg_match()
部分内容来自:http://www.nowamagic.net/librarys/veda/detail/1054
preg_match — 进行正则表达式匹配。
语法:int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。如果提供了 matches ,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
参数 | 说明 |
---|---|
pattern | 正则表达式 |
subject | 需要匹配检索的对象 |
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() 替代,要快得多。
获取Google首页title
比如说要获取google首页的title内容,代码如下:
1 |
<?php |
2 |
$str = file_get_contents ( 'http://www.google.com' ); |
3 |
preg_match( '/<title>(.*)<\/title>/' , $str , $arr ); |
4 |
echo $arr [1]; |
5 |
?> |
从网址获取域名
1 |
<?php |
2 |
preg_match( "/^(http:\/\/)?([^\/]+)/i" , "http://www.nowamagic.net/index.html" , $matches ); |
3 |
$host = $matches [2]; // 从主机名中取得后面两段 |
4 |
preg_match( "/[^\.\/]+\.[^\.\/]+$/" , $host , $matches ); |
5 |
echo "domain name is: {$matches[0]}\n" ; |
6 |
?> |
preg_match($pattern,$string,$matcher)其中$pattern对应的就是/^(http:\/\/)?([^\/]+)/i,$string 是http://www.php.net/index.html,$match是匹配到的结果。
如果提供了 matches,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。
$matches[0] 将包含与整个模式匹配的文本。咱们用pring_r打印出来第一个$matches:
1 |
Array ( |
2 |
[0] => http: //www.nowamagic.net |
3 |
[1] => http: // |
4 |
[2] => www.nowamagic.net ) |
$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中,()代表模式:匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。就是说数组中下标为1的值就是正则中/^(http:\/\/)?([^\/]+)/i第一个()里的值!数组下标2的值以此类推。
在文本中搜索特定字符串
1 |
<?php |
2 |
// 模式定界符后面的 "i" 表示不区分大小写字母的搜索 |
3 |
if (preg_match ( "/nowamagic/i" , "Welcome to nowamagic.net." )) { |
4 |
print "A match was found." ; |
5 |
} else { |
6 |
print "A match was not found." ; |
7 |
} |
8 |
?> |
楼主自己加的:
关于preg_match()这个函数,楼主之前一直比较苦恼。开始不懂正则表达式,以至于$matches数组里存储的东西一直不知道怎么来的。之后看了一些正则表达式,才了然了。然后这里我想说的是这个函数的另外两个参数,flags和offset。
最新的手册上:
int preg_match ( string $pattern
, string $subject
[, array &$matches
[, int $flags
= 0 [, int $offset
= 0 ]]] )
flags
flags
可以被设置为以下标记值:
PREG_OFFSET_CAPTURE
- 如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。 注意:这会改变填充到
matches
参数的数组,使其每个元素成为一个由 第0个元素是匹配到的字符串,第1个元素是该匹配字符串 在目标字符串subject
中的偏移量。
offset
通常,搜索从目标字符串的开始未知开始。可选参数 offset
用于 指定从目标字符串的某个未知开始搜索(单位是字节)。
先说flags,其实手册上说的很清楚。需要举个例子。
<?php
$subject = "bcdef";
$pattern = '/def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); echo "<pre>";
print_r($matches);
echo "<pre>";
?>
结果为:
Array
(
[0] => Array
(
[0] => def
[1] => 2
) )
填充的$matches数组的$matches[0][1]被填充了偏移量,也就是2.因为是扫过bc两个字符后,才找到def。所以偏移量是2.
flags的可选项貌似只有PREG_OFFSET_CAPTURE一个,手册上并没有给出其他的。
下面说offset参数。给出该参数后呢,搜索$subject的时候从offset的指定位置开始搜索,下面给出例子。
<?php
$subject = "bcdef";
$pattern = '/def/';
preg_match($pattern, $subject, $matches1, PREG_OFFSET_CAPTURE,2);
preg_match($pattern, $subject, $matches2, PREG_OFFSET_CAPTURE,3); echo "<pre>";print_r($matches1);echo "<pre>";
echo "<pre>";print_r($matches2);echo "<pre>";
?>
结果为:
Array
(
[0] => Array
(
[0] => def
[1] => 2
) )
Array
(
)
$matches1数组是从$subject字符串偏移量2之后开始的搜索,所以找到了匹配项def;而$matches2数组是$subjec字符串偏移量3之后(只剩下ef)搜索,所以无法找到匹配。所以$matches2为空。
以上是楼主的一点小心得,请大家指正。也希望能帮到大家更好的理解preg_matches()这个函数。
PHP函数preg_match()的更多相关文章
- php 函数preg_match、preg_match_all ,以及正则表达式规则
<?php $str = 'php is the best language phhhhp is'; $part = '/ph{1,}p/'; echo preg_match($part, $s ...
- PHP 正则表达式匹配函数 preg_match 与 preg_match_all
preg_match() preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 . 语法: 1 int preg_match( string pattern, strin ...
- php中函数preg_match或preg_match_all 第三个参数$match的解释
理解自:http://www.cnblogs.com/vicenteforever/articles/1623137.html php手册中是这样解释的 matches 如果提供了参数matches, ...
- PHP中的正则表达式函数preg_
preg_match(); //用于正则表达式的匹配,且只匹配一次 preg_match_all();//用于正则表达式的匹配,会对所有符合规则的都进行匹配 preg_replace(); ...
- PHP常用函数和常量
PHP常用系统常量 __FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在 ...
- regular expression (php函数)
1. 正则表达式是一种字符串搜索和匹配的工具 2. php中常用正则表达式函数 preg_match($pattern, $subject) preg_match_all($pattern, $sub ...
- PCRE兼容正则表达式函数
1.preg_grep()函数 函数语法: array preg_grep ( string pattern, array input ) 函数功能: 使用数组input中的元素一一匹配表达式patt ...
- php中常用的正则表达式函数
php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...
- php第五天-正则表达式,字符串的匹配与查找函数,数组切割
在php中有两套正则表达式,两者功能相似,一套是由PCRE,使用"preg_"为前缀命名的函数,一套是由POSIX拓展提供的,使用以"ereg_"命名的函数 0 ...
随机推荐
- dede tag标签静态化
看回那2个文件夹即可,txt说明书我已经修改过. 下面说一下tag标签静态化之后在内容页.列表页中如何使用. 内容页中沿用之前的方法即可: {dede:tag sort='new' getall='0 ...
- vue3.0的安装使用
关于旧版本 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vu ...
- 主动降噪(Active Noise Control)
智能耳机 人机交互 智能声学终端 智能耳机 智能音箱 智能听力器 喇叭单体 动圈喇叭 新材料 DLC 石墨烯 陶瓷单位 吸音材料 智能芯片 阵列式麦克风 声纹传感器 演算法 降噪算法 智能听力保护 A ...
- 小白学 Python(2):基础数据类型(上)
人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 接触一门新的语言,肯定要先了解它的基础数据类型.啥?你问我为啥要先了解基础数据类型? 为了你的生命安全,还是乖乖听我 B ...
- windows离线安装sublime插件:ctags
网络上一堆安装ctags教程,可都是在线安装. 花了点时间摸索出了离线安装教程. 1. 准备好sublime 和 package control sublime我用的版本是text 2. text 3 ...
- [BZOJ3449] [Usaco2014 Feb]Secret Code
Description Farmer John has secret message that he wants to hide from his cows; the message is a str ...
- Win10系统Cortana 小娜无法搜索
1.在开始菜单中找“Windows PowerShell”文件夹,打开后右键单击Windows PowerShell,选择“以管理员身份运行” 2.输入命令,通过重新注册语音小娜来解决问题 Get-A ...
- C++ Web框架::cintara
1.Cinatra是由C++开源社区purecpp发起的一个开源项目,是一个现代C++写的Web框架,旨在给用户提供一个易用.灵活和高性能的Web框架,让用户能完全专注于核心逻辑而无需关注http细节 ...
- ElasticSearch Bulk API
做一个简单的记录,以便自己后续查找 一.环境要求 ElasticSearch 7.3.0 Kibana 7.3.0 二.详情 ElasticSearch 的 Bulk API 可以批量进行索引或者删除 ...
- html简介(1)
HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标记语言