首页
学习
活动
专区
工具
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 →

扫码关注腾讯云开发者

领取腾讯云代金券