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之间的大写或小写字母结尾的字符串。