📅  最后修改于: 2023-12-03 15:03:39.266000             🧑  作者: Mango
在 PHP 中,preg_match()
函数用于对字符串进行正则表达式匹配,它的语法如下所示:
int preg_match(string $pattern, string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]])
其中,
$pattern
:需要匹配的正则表达式模式;$subject
:需要匹配的字符串;$matches
:可选参数,用于存储匹配到的结果;$flags
:可选参数,用于指定匹配方式;$offset
:可选参数,用于指定匹配字符串的起始位置。preg_match()
函数会返回匹配到的次数(成功匹配到时为 1,未匹配到时为 0)或者在发生错误时返回 FALSE
。
$patten = '/abc/';
$subject = 'abcdefg';
$result = preg_match($pattern, $subject);
if ($result) {
echo '匹配成功';
} else {
echo '匹配失败';
}
在上面的例子中,匹配到了一次,所以输出结果为“匹配成功”。
preg_match()
函数会将匹配到的结果存储到 $matches
数组中。该数组的第 0 个元素存储整个匹配到的字符串,从第 1 个元素开始存储每个子表达式匹配到的结果。
$pattern = '/(ab)c(d)e/';
$subject = 'abcdefg';
preg_match($pattern, $subject, $matches);
print_r($matches);
在上面的例子中,正则表达式 /(ab)c(d)e/
匹配到字符串 abcdefg
中的 abcde
,其中子表达式 (ab)
和 (d)
分别匹配到了 ab
和 d
。所以,输出结果为:
Array
(
[0] => abcde
[1] => ab
[2] => d
)
需要注意的是,如果出现了多次匹配,$matches
数组只会存储最后一次的匹配结果。
$flags
参数用于指定匹配方式,可选的值有以下几种:
PREG_OFFSET_CAPTURE
:除了存储匹配到的结果之外,还会记录匹配结果的偏移量;PREG_UNMATCHED_AS_NULL
:如果没有匹配上,将 matches
中未匹配到的部分填充为 null ;PREG_PATTERN_ORDER
:进行排序,每找到一个匹配项,存储到 matches
中;PREG_SET_ORDER
:数组中的每个元素是一个二维数组,其中匹配结果与偏移量都是子数组的元素。以下是以 PREG_OFFSET_CAPTURE
为例的代码片段:
$pattern = '/abc/';
$subject = 'abcdefg';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
输出结果为:
Array
(
[0] => Array
(
[0] => abc
[1] => 0
)
)
其中 [0]
存储着匹配结果 abc
,[1]
则是偏移量,表示起始位置为 0。
$offset
参数用于指定匹配字符串的起始位置。例如,在匹配字符串 abcdefg
中的 cd
时,如果从起始位置开始匹配,将匹配到 abcd
,而不是 cd
。可以通过指定 $offset
参数来解决该问题。
$pattern = '/cd/';
$subject = 'abcdefg';
preg_match($pattern, $subject, $matches, 0, 2);
print_r($matches);
输出结果为:
Array
(
[0] => cd
)
preg_match()
函数是一个非常强大的正则表达式工具,可以方便地进行字符串匹配和提取。要注意参数的使用方式和匹配结果的存储形式。对于复杂的匹配需求,建议在编写正则表达式时使用在线正则表达式工具来测试效果。