PHP preg_match()函数

PHP preg_match()函数

preg_match()函数是PHP内置函数,用于执行正则表达式匹配。此函数在字符串中搜索模式,如果模式存在则返回true,否则返回false。

通常,搜索从$subject字符串参数的开头开始。可选的$offset参数用于从指定位置开始搜索。

语法

int preg_match (string pattern, stringsubject, array matches, intflags, int $offset)

注意:$offset是一个可选参数,用于指定从哪里开始搜索。

参数

此函数接受五个参数,如下所述:

pattern

它是一个字符串类型的参数。此参数保存要搜索的模式。

subject

此参数保存要在其中搜索模式的输入字符串。

matches

如果提供了matches参数,则它将包含搜索结果。

matches[0] - 它保存与完整模式匹配的文本。

matches[1] - 它包含与第一个捕获的括号子模式匹配的文本,依此类推。

flags

flags可以有以下标志:

  • PREG_OFFSET_CAPTURE: 如果在preg_match()函数中传递了此标志,则对于每个匹配,附加的字符串偏移量也会返回。
  • PREG_UNMATCHED_AS_NULL: 如果在preg_match()函数中传递了此标志,则未匹配的子模式将报告为NULL,否则它们将报告为空字符串。

offset

默认情况下,搜索从$subject参数的开头开始。offset参数用于指定搜索将开始的位置。这是一个可选参数。

返回类型

preg_match()函数如果模式匹配返回true,否则返回false。

注意:如果只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()函数。使用strpos()函数会更快。

示例

<?php   
    //initialize a variable of string type
    site = "javatpoint";
    preg_match('/(java)(t)(point)/',site, matches, PREG_OFFSET_CAPTURE);
    //display the matches result
    print_r(matches);
?>

输出结果:

Array ( [0] => Array ( [0] => javatpoint [1] => 0 ) [1] => Array ( [0] => java [1] => 0 )
[2] => Array ( [0] => t [1] => 4 ) [3] => Array ( [0] => point [1] => 5 ) )

我们可以如下所示看到上面的输出,以更好地理解。

Array ( 
[0] => Array ( 
[0] => javatpoint 
[1] => 0 
) 
[1] => Array (
 [0] => java 
[1] => 0 
) 
[2] => Array (
 [0] => t 
[1] => 4 
) 
[3] => Array ( 
[0] => point
 [1] => 5 
) 
)

示例:不区分大小写的搜索

<?php
    //initialize a variable of string type
    website = "JTP is a best online platform to learn.";

    //case insensitive search for word jtp
    //The "i" after pattern delimiter indicates case-insensitive searchres = preg_match('/jtp/i', website,matches);

    if (res) {
        echo "Pattern matched in string.</br>";
        print_r(matches);
    } else {
        echo "Pattern not matched in string.";
    }
?>

输出:

Pattern matched in string.
Array ( [0] => JTP )

示例:通过使用单词边界 (\b)

<?php
    /* The \b indicates the word boundary in the pattern. So, it matches only the distinct
             word like "web", and words like "coreweb" or " webinar" do not match partially.*/            
    if (preg_match("/\bweb\b/i", "PHP is a web scripting language.")) {
        echo "A match was found. </br>";
    } else {
        echo "A match was not found. </br>";
    }

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

输出:

A match was found.
A match was not found.

示例:从URL中获取域名

<?php

    // get host name from URL
    preg_match('@^(?:https://)?([^/]+)@i',
        "https://www.javatpoint.com/php-tutorial", matches);host = matches[1];

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

输出:

Domain name is: javatpoint.com

正则表达式(Regular Expression)语法

[abc] 匹配单个字符 – a、b或c
[^abc] 匹配任何单个字符,除了a、b或c
[a-z] 匹配范围在a-z之间的任何单个字符
[a-zA-Z] 匹配范围在a-z或A-Z之间的任何单个字符
^ 行的开头
$ 行的结尾
\A 字符串的开头
\z 字符串的结尾
. 任何单个字符
\s 任何空白字符
\S 任何非空白字符
\d 任何数字
\D 任何非数字字符
\w 任何单词字符(字母、数字、下划线)
\W 任何非单词字符
\b 单词边界检查
/?/ 开始和结束正则表达式
(?) 捕获括号()中的所有内容
(a|b) a或b
a? 零个或一个a
a* 零个或多个a
a+ 一个或多个a
a{3} 恰好3个a
a{3,} 3个或更多的a
a{3,6} 3到6个a
i 不区分大小写检查
m 使点匹配换行符
x 忽略正则表达式中的空格

解释正则表达式模式 [^[a-zA-Z0-9._-] +@[a-zA-Z0-9-]+\\.[a-zA-Z.]{2,5}$/]

  • "/?/" 它表示正则表达式的开头和结尾。
  • [^[a-zA-Z0-9._-] 它匹配任何大写或小写字母,0至9之间的数字,点号,下划线或破折号。
  • +@[a-zA-Z0-9-] 它匹配@符号后面的大写或小写字母,0至9之间的数字或破折号。
  • +\\.[a-zA-Z.]{2,5}$/ 使用反斜杠来转义点号,然后它匹配以长度在2至5之间的大写或小写字母结尾的字符串。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程