preg_match()函数是PHP的内置函数, 它执行正则表达式匹配。此函数在字符串中搜索模式, 如果模式存在则返回true, 否则返回false。
通常, 搜索从$ subject字符串参数的开头开始。可选参数$ offset用于从指定位置开始搜索。
句法
int preg_match (string $pattern, string $subject, array $matches, int $flags, int $offset)
注意:$ offset是一个可选参数, 用于指定从何处开始搜索。
参数
该函数接受五个参数, 如下所述:
图案
它是一个字符串类型参数。此参数保存要搜索的模式作为字符串。
学科
此参数保存我们在其中搜索模式的输入字符串。
火柴
如果提供matchs参数, 它将包含搜索结果。
matchs [0]-它将保留与完整模式匹配的文本。
matchs [1]-它将包含与第一个捕获的带括号的子模式匹配的文本, 依此类推。
标志
这些标志可以具有以下给出的标志:
- PREG_OFFSET_CAPTURE:如果在preg_match()中传递此标志, 则对于每次发生的匹配, 附加字符串偏移量也将返回。
- PREG_UNMATCHED_AS_NULL:如果在preg_match()中传递此标志, 则不匹配的子模式将报告为NULL, 否则将报告为空字符串。
抵销
默认情况下, 搜索从$ subject参数的开头开始。 offset参数用于指定开始搜索的位置。它是一个可选参数。
返回类型
如果pattern匹配, 则preg_match()函数返回true, 否则返回false。
注意:如果只想检查另一个字符串中是否包含一个字符串, 请不要使用preg_match()函数。使用strpos()函数, 因为它将更快。
例子
<?php
//initialize a variable of string type
$site = "srcmini";
preg_match('/(java)(t)(point)/', $site, $matches, PREG_OFFSET_CAPTURE);
//display the matches result
print_r($matches);
?>
输出
Array ( [0] => Array ( [0] => srcmini [1] => 0 ) [1] => Array ( [0] => java [1] => 0 )
[2] => Array ( [0] => t [1] => 4 ) [3] => Array ( [0] => point [1] => 5 ) )
我们可以看到下面给出的上述输出以更好地理解它。
Array (
[0] => Array (
[0] => srcmini
[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 search
$res = 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.srcmini02.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: srcmini02.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 | Any digit |
\D | 任何非数字 |
\w | 任何文字字符(字母, 数字, 下划线) |
\W | 任何非文字字元 |
\b | 词边界检查器 |
/?/ | 开始和结束正则表达式 |
(?) | 捕获括号中包含的所有内容() |
(a|b) | a或b |
a? | 零或一个 |
a* | 零个或多个 |
a+ | 一个或多个 |
a{3} | 恰好是3个 |
a {3, } | 3个或更多 |
一个{3, 6} | 在3到6之间 |
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之间的任何小写或大写字母。
评论前必须登录!
注册