PHP中的正则函数

PHP提供了至少3套独立的正则引擎,分别是pregeregmb_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中。在第一个匹配找到后,子序列继续从最后一次匹配位置搜索。

其中的主要参数有:

  1. pattern 要搜索的模式,字符串形式。
  2. subject 输入字符串。
  3. 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中。

其中的主要参数有:

  1. pattern 要搜索的模式,字符串形式。
  2. subject 输入字符串。
  3. 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进行替换。

其中的主要参数有:

  1. pattern 要搜索的模式,字符串形式。
  2. replacement 用于替换的字符串或字符串数组。
  3. subject 要进行搜索和替换的字符串或字符串数组。

用法示例:

 <?php
$str = 'foo       o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 将会改变为'foo o'
echo $str;
?>

除上述函数外,preg正则函数还有preg_filterpreg_grep等等,请读者自行查看PHP参考手册

30. 正则引擎主要有两大类,一类是DFA,一类是NFA,其中DFA是文本主导的正则引擎,而NFA是表达式主导的正则引擎。NFA引擎最重要的性质是,它会依次处理各个子表达式,遇到需要在两个可能成功中进行选择的时候,它会选择其一,同时记住另一个,以备后需。通常情况下,在速度和功能方面强于其余两者。

results matching ""

    No results matching ""