正则
preg_match
根据正则表达式对字符串进行搜索匹配,在第一次匹配成功后结束
preg_match (string $pattern, string $subject, &$matches, int $flags = 0, int $offset = 0): int|false
$pattern:正则表达式$subject:搜索字符串$matches:可选参数(数组类型),如果提供了$matches,它将被填充为搜索结果
$matches[0] 包含完整模式匹配到的文本, $matches[1] 包含第一个捕获子组匹配到的文本,以此类推
$flags:可选参数,$flags可以被设置为PREG_OFFSET_CAPTURE,如果传递了这个标记,对于每一个出现的匹配,返回时都会附加上字符串偏移量(相对于目标字符串的)$offset:可选参数,用于指定从目标字符串的哪个位置开始搜索(单位是字节)
该函数返回匹配的次数,为0或1,匹配不成功返回0,匹配成功返回1并结束匹配
$name = 'abcdef';
preg_match('/^a/', $name, $match, PREG_OFFSET_CAPTURE);
print_r($match);
Array (
[0] => Array (
[0] => a [1] => 0
)
)
preg_match_all
和pren_match类似,但是是搜索字符串中所有可以和正则表达式匹配的结果
preg_match_all (string $pattern, string $subject, &$matches, int $flags = PREG_PATTERN_ORDER, int $offset = 0): int|false|null
$name = 'abcabc';
preg_match_all('/ab./', $name, $match, PREG_OFFSET_CAPTURE);
print_r($match);
Array (
[0] => Array (
[0] => Array ( [0] => abc [1] => 0 )
[1] => Array ( [0] => abc [1] => 3 )
)
)
preg_grep
对数组中元素进行匹配
function preg_grep (string $pattern, array $array, int $flags = 0): array|false
$pattern:正则表达式$input:搜索数组$flags:可选参数,可以设置为PREG_GREP_INVERT,这时函数会返回数组中与给定模式$pattern不匹配的元素组成的数组
$a = [
"aaa",
"bbb",
"abc"
];
$result = preg_grep('/^a/', $a);
print_r($result);
Array ( [0] => aaa [2] => abc )
preg_replace
搜索 subject 中匹配 pattern 的部分,以 replacement 进行替换
preg_replace (array|string $pattern, array|string $replacement, array|string $subject, int $limit = -1, &$count): array|string|null
$pattern:正则表达式$replacement:用于替换的字符串或字符串数组
如果这个参数是一个字符串,并且 $pattern是一个数组,那么所有的模式都使用这个字符串进行替换
如果$pattern和$replacement都是数组,每个$pattern使用$replacement中对应的元素进行替换
如果$replacement中的元素比$pattern中的少,多出来的$pattern使用空字符串进行替换。
$subject:要进行搜索和替换的字符串或字符串数组,如果$subject是一个数组,搜索和替换回在$subject的每一个元素上进行,并且返回值也会是一个数组$limit:可选参数,每个模式在每个$subject上进行替换的最大次数;默认是 -1(无限)$count:可选参数,如果指定,将会被填充为完成的替换次数
$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/';
$replacement = '$1-$2-$3';
echo preg_replace($pattern, $replacement, $string);
April-15-2003
$string = 'The a b';
$patterns = array();
$patterns[0] = '/a/';
$patterns[1] = '/b/';
$replacements = array();
$replacements[0] = '1';
$replacements[1] = '2';
echo preg_replace($patterns, $replacements, $string);
The 1 2
preg_filter
类似preg_replace,但是preg_filter() 函数只返回匹配成功的结果,而 preg_replace() 返回所有结果,不管是否匹配成功
preg_filter (array|string $pattern, array|string $replacement, array|string $subject, int $limit = -1, &$count): array|string|null
$string = ['aaa', 'bbb'];
$patterns = array('/aaa/', '/abb/');
$replacements = array('***', '###');
print_r(preg_filter($patterns, $replacements, $string));
print_r(preg_replace($patterns, $replacements, $string));
Array ( [0] => *** )
Array ( [0] => *** [1] => bbb )
preg_split
使用正则分割字符串
preg_split (string $pattern, string $subject, int $limit = -1, int $flags = 0): array|false
-
$pattern:正则表达式 -
$subject:分隔的字符串 -
$limit:可选参数,如果指定,就将限制分隔得到的子串最多只有 limit 个,并且最后一个子串将包含所有剩余部分;limit 值为 -1、0 或 NULL 时都代表“不限制”,建议使用 NULL -
$flags:可选参数,它有 3 个取值。- 若设置为
PREG_SPLIT_NO_EMPTY,则 preg_split() 将返回分隔后的非空部分 - 若设置为
PREG_SPLIT_DELIM_CAPTURE,则分隔的模式中的括号表达式将被捕获并返回 - 若设置为
PREG_SPLIT_OFFSET_CAPTURE,则对于每一个出现的匹配返回时会附加字符串偏移量
- 若设置为
// 使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
Array (
[0] => hypertext
[1] => language
[2] => programming
)
// 将一个字符串分隔为组成它的字符
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
Array (
[0] => s
[1] => t
[2] => r
[3] => i
[4] => n
[5] => g
)
preg_quote
转义正则表达式字符
preg_quote (string $str, ?string $delimiter): string
$str:字符串$delimiter:额外增加的需要转义的字符
正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : - #
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords, '/');
echo $keywords;
\$40 for a g3\/400