. 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 [\u4e00-\u9fa5]{2,20} 匹配2-20个汉字 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^x] 匹配除了x以外的任意字符 [^aeIoU] 匹配除了aeIoU这几个字母以外的任意字符 (exp) 匹配exp,并捕获文本到自动命名的组里 (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp) (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号 零宽断言 (?=exp) 匹配exp前面的位置 (?<=exp) 匹配exp后面的位置 (?!exp) 匹配后面跟的不是exp的位置 (?<!exp) 匹配前面不是exp的位置 注释 (?#comment) 这种类型的组不对正则表达式的处理产生任何影响,用于提供注释让人阅读 preg_match : 执行一个正则表达式匹配
说明
int
preg_match(
string
$pattern
,string$subject
[,array&$matches
[,int$flags
= 0[,monospace; font-style:italic">$offset= 0]]] )
@H_502_46@
搜索subject
与pattern
给定的正则表达式的一个匹配.
Report a bug
@H_502_46@
参数
-
@H_502_69@
pattern
-
要搜索的模式,字符串类型.
- subject
-
输入字符串.
- matches
-
如果提供了参数
matches
,它讲被填充为搜索结果.$matches[0]将包含完整模式匹配到的文本,$matches[1]将包含第一个捕获子组匹配到的文本,以此类推. - flags
-
flags
可以被设置为以下标记值: - offset
-
通常,搜索从目标字符串的开始未知开始.可选参数
offset
用于 指定从目标字符串的某个未知开始搜索(单位是字节).Note:
使用
offset
参数不同于向preg_match()传递按照位置通过substr($subject,$offset)截取目标字符串结果,因为pattern
可以包含断言比如^,$或者(?<=x). 比较:<?PHP$subject="abcdef";$pattern='/^def/';preg_match($pattern,$subject,$matches,PREG_OFFSET_CAPTURE,3);print_r($matches);?>
@H_502_46@ @H_502_46@以上例程会输出:
Array ( )
@H_502_46@ @H_502_46@当这个示例使用截取后传递时
<?PHP
$subject="abcdef";
$pattern='/^def/';
preg_match($pattern,substr($subject,3),PREG_OFFSET_CAPTURE);
print_r($matches);
?> @H_502_46@ @H_502_46@将会产生匹配
Array ( [0] => Array ( [0] => def [1] => 0 ) )
@H_502_46@ @H_502_46@ @H_502_46@ @H_502_46@
返回值preg_match()返回
@H_502_46@pattern
的匹配次数. 它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后 将会停止搜索.preg_match_all()不同于此,它会一直搜索subject
直到到达结尾. 如果发生错误preg_match()返回FALSE
.更新日志@H_348_403@ @H_620_404@
@H_502_46@版本 说明 @H_620_404@5.2.2 命名子组可以接受(?<name>),(?'name')以及(?P<name>)语法. 之前版本仅接受(?P<name>)语法. @H_620_404@4.3.3 增加了参数 @H_620_404@offset
.4.3.0 增加了标记 @H_620_404@PREG_OFFSET_CAPTURE
.flags. 范例Example #1 查找文本字符串"PHP"
<?PHP
@H_502_46@ @H_502_46@ @H_502_46@
//模式分隔符后的"i"标记这是一个大小写不敏感的搜索
if(preg_match("/PHP/i","PHPisthewebscriptinglanguageofchoice.")){
echo"Amatchwasfound.";
}else{
echo"Amatchwasnotfound.";
}
?>Example #2 查找单词"word"<?PHP
/*模式中的\b标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配
*单词的部分内容比如"webbing"或"cobweb"*/
if(preg_match("/\bweb\b/i","PHPisthewebscriptinglanguageofchoice.")){
echo"Amatchwasfound.";
}else{
echo"Amatchwasnotfound.";
}
if(preg_match("/\bweb\b/i","PHPisthewebsitescriptinglanguageofchoice.")){
echo"Amatchwasfound.";
}else{
echo"Amatchwasnotfound.";
}
?> @H_502_46@ @H_502_46@ @H_502_46@Example #3 获取URL中的域名<?PHP
//从URL中获取主机名称
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.PHP.net/index.html",$matches);
$host=$matches[1];
//获取主机名称的后面两部分
preg_match('/[^.]+\.[^.]+$/',$host,$matches);
echo"domainnameis:{$matches[0]}\n";
?> @H_502_46@ @H_502_46@以上例程会输出:
@H_502_46@domain name is: PHP.net
@H_502_46@ @H_502_46@ @H_502_46@Example #4 使用命名子组<?PHP
$str='foobar:2008';
preg_match('/(?P<name>\w+):(?P<digit>\d+)/',$str,$matches);
/*下面例子在PHP5.2.2(pcre7.0)或更新版本下工作,然而,为了后向兼容,上面的方式是推荐写法.*/
//preg_match('/(?<name>\w+):(?<digit>\d+)/',$str,$matches);
print_r($matches);
?> @H_502_46@ @H_502_46@