首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

preg_match

(PHP 4, PHP 5, PHP 7)

preg_match - 执行正则表达式匹配

描述

代码语言:javascript
复制
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

搜索主题与模式中给定的正则表达式匹配。

参数

pattern

作为字符串搜索的模式。

subject

输入字符串。

matches

如果提供了匹配,则会填充搜索结果。 $ matches0将包含匹配完整模式的文本,$ matches1将包含匹配第一个捕获的括号内的子模式的文本,依此类推。

flags

flags 可以是以下标志:

PREG_OFFSET_CAPTURE

如果此标志被传递,则对于每次发生的匹配,附属字符串偏移量也将被返回。 请注意,这会将匹配值更改为数组,其中每个元素都是由偏移量为0的匹配字符串组成的数组,并且它的字符串偏移量为偏移量为1的主体。

代码语言:javascript
复制
<?php
preg_match('/(foo)(bar)(baz)/',?'foobarbaz',?$matches,?PREG_OFFSET_CAPTURE);
print_r($matches);
?>

上面的例子将输出:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [0] => foobarbaz
            [1] => 0
        )

    [1] => Array
        (
            [0] => foo
            [1] => 0
        )

    [2] => Array
        (
            [0] => bar
            [1] => 3
        )

    [3] => Array
        (
            [0] => baz
            [1] => 6
        )

)
代码语言:txt
复制
 `offset`   

通常,搜索从主题字符串的开始处开始。 可选参数偏移量可用于指定开始搜索的替代位置(以字节为单位)。

注意:由于可以包含诸如^$(?<= x)的 断言,因此使用offset不等同于将substr($ subject,$ offset)传递给preg_match()以代替主题字符串。比较:<?php $ subject =“abcdef”; $ pattern ='/ ^ def /'; preg \ _match($ pattern,$ subject,$ matches,PREG \ _OFFSET \ _CAPTURE,3); 打印\ _r($比赛); ?>上面的例子会输出:Array(),而这个例子<?php $ subject =“abcdef”; $ pattern ='/ ^ def /'; preg \ _match($ pattern,substr($ subject,3),$ matches,PREG \ _OFFSET \ _CAPTURE); 打印\ _r($比赛); ?>将产生Array(0 => Array(0 => def 1 =>)patternsubstr()中,使用\ G断言而不是^ anchor,或者使用A修饰符,它们都与offset参数一起工作。

返回值

preg_match()返回1,如果模式匹配给定主题,则返回0;否则返回FALSE。

警告

此函数可能会返回布尔FALSE,但也可能会返回一个非布尔值,其值为FALSE。 有关更多信息,请阅读布尔部分。 使用===运算符来测试此函数的返回值。

更新日志

描述

5.3.6

如果偏移高于主题长度,则返回FALSE。

5.2.2

已命名的子模式现在接受语法(?<名称>)和(?'名称')以及(?P <名称>)。以前的版本只接受(?P <名称>)。

例子

示例#1 查找字符串“php”

代码语言:javascript
复制
<?php
//?The?"i"?after?the?pattern?delimiter?indicates?a?case-insensitive?search
if?(preg_match("/php/i",?"PHP?is?the?web?scripting?language?of?choice."))?{
????echo?"A?match?was?found.";
}?else?{
????echo?"A?match?was?not?found.";
}
?>

例#2 找到词汇“web”

代码语言:javascript
复制
<?php
/*?The?\b?in?the?pattern?indicates?a?word?boundary,?so?only?the?distinct
?*?word?"web"?is?matched,?and?not?a?word?partial?like?"webbing"?or?"cobweb"?*/
if?(preg_match("/\bweb\b/i",?"PHP?is?the?web?scripting?language?of?choice."))?{
????echo?"A?match?was?found.";
}?else?{
????echo?"A?match?was?not?found.";
}

if?(preg_match("/\bweb\b/i",?"PHP?is?the?website?scripting?language?of?choice."))?{
????echo?"A?match?was?found.";
}?else?{
????echo?"A?match?was?not?found.";
}
?>

示例#3 从URL中获取域名

代码语言:javascript
复制
<?php
//?get?host?name?from?URL
preg_match('@^(?:http://)?([^/]+)@i',
????"http://www.php.net/index.html",?$matches);
$host?=?$matches[1];

//?get?last?two?segments?of?host?name
preg_match('/[^.]+\.[^.]+$/',?$host,?$matches);
echo?"domain?name?is:?{$matches[0]}\n";
?>

上面的例子将输出:

代码语言:javascript
复制
domain name is: php.net

示例#4 使用命名的子模式

代码语言:javascript
复制
<?php

$str?=?'foobar:?2008';

preg_match('/(?P<name>\w+):?(?P<digit>\d+)/',?$str,?$matches);

/*?This?also?works?in?PHP?5.2.2?(PCRE?7.0)?and?later,?however?
?*?the?above?form?is?recommended?for?backwards?compatibility?*/
//?preg_match('/(?<name>\w+):?(?<digit>\d+)/',?$str,?$matches);

print_r($matches);

?>

上面的例子将输出:

代码语言:javascript
复制
Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

注意

提示

如果您只想检查一个字符串是否包含在另一个字符串中,请勿使用preg_match()。使用strpos(),因为它会更快。

扩展内容

  • preg_quote() - 引用正则表达式字符
  • preg_match_all() - 执行全局正则表达式匹配
  • preg_replace() - 执行正则表达式搜索并替换
  • preg_split() - 用正则表达式分割字符串
  • preg_last_error() - 返回上一次PCRE正则表达式执行的错误代码

← preg_match_all

preg_quote →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com