PHP中的正则函数
PHP提供了至少3套独立的正则引擎,分别是preg
、ereg
和mb_ereg
。本书将介绍preg引擎提供的函数,preg使用NFA引擎。30
下面,我们介绍几个常用的preg函数:
preg_match_all
preg_match_all
函数执行一个全局正则表达式匹配。
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
搜索subject
中所有匹配pattern
给定正则表达式的匹配结果,并将它们以flag
指定顺序输出到matches
中。在第一个匹配找到后,子序列继续从最后一次匹配位置搜索。
其中的主要参数有:
- pattern 要搜索的模式,字符串形式。
- subject 输入字符串。
- matches 多维数组,作为输出参数输出所有匹配结果, 数组排序通过
flags
指定。
preg_match_all
函数返回完整匹配次数(可能是0),或者如果发生错误返回FALSE。[18]
preg_match
preg_match函数执行一个正则表达式匹配。
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
搜索subject
中所有匹配pattern
给定正则表达式的匹配结果,并将它们以flag
指定顺序输出到matches
中。
其中的主要参数有:
- pattern 要搜索的模式,字符串形式。
- subject 输入字符串。
- matches 如果提供了参数
matches
,它将被填充为搜索结果。$matches[0]
将包含完整模式匹配到的文本,$matches[1]
将包含第一个捕获子组匹配到的文本,以此类推。
preg_match()
返回 pattern
的匹配次数。如果发生错误preg_match()
返回 FALSE。 它的值将是0次(不匹配)或1次,因为preg_match()
在第一次匹配后将会停止搜索。preg_match_all()
不同于此,它会一直搜索subject
直到到达结尾。[18]
preg_replace
preg_replace
函数执行一个正则表达式的搜索和替换。
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject
中匹配pattern
的部分, 以replacement
进行替换。
其中的主要参数有:
- pattern 要搜索的模式,字符串形式。
- replacement 用于替换的字符串或字符串数组。
- subject 要进行搜索和替换的字符串或字符串数组。
用法示例:
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 将会改变为'foo o'
echo $str;
?>
除上述函数外,preg正则函数还有preg_filter
、preg_grep
等等,请读者自行查看PHP参考手册。
30. 正则引擎主要有两大类,一类是DFA,一类是NFA,其中DFA是文本主导的正则引擎,而NFA是表达式主导的正则引擎。NFA引擎最重要的性质是,它会依次处理各个子表达式,遇到需要在两个可能成功中进行选择的时候,它会选择其一,同时记住另一个,以备后需。通常情况下,在速度和功能方面强于其余两者。 ↩