PHP中的正则表达式相关函数

PHP中的正则表达式相关函数

常用的正则函数

1、执行一个正则表达式匹配

int preg_match ( string pattern , string subject [, array &matches [, int flags = 0 [, int offset = 0 ]]] )

搜索subjectpattern给定的正则表达式的一个匹配.

  • pattern 要匹配的正则表达式
  • subject 匹配的字符串
  • matches 匹配到结果

返回值为 pattern 的匹配次数

$subject="jack001 is my name,so I'am jack007";
$pattern='/jack[0-9]+/';
echo preg_match($pattern, $subject,$matches);
echo '<pre>';
print_r($matches);

echo preg_match_all($pattern, $subject,$matches);
echo '<pre>';
print_r($matches);

2、执行一个全局正则表达式匹配

int preg_match_all ( string pattern , string subject [, array &matches [, int flags = 0 [, int offset = 0 ]]] )

搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中.

  • pattern 要匹配的正则表达式
  • subject 匹配的字符串
  • matches 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。

返回值:返回完整匹配次数(可能是0),或者如果发生错误返回FALSE

$subject="jack001 is my name,so I'am jack007";
$pattern='/jack[0-9]+/';
echo preg_match($pattern, $subject,$matches);
echo '<pre>';
print_r($matches);

echo preg_match_all($pattern, $subject,$matches);
echo '<pre>';
print_r($matches);

3、转义正则表达式字符

string preg_quote ( string str [, string delimiter = NULL ] )

参数 描述
str 输入的字符串每个正则表达式语法中的字符前增加一个反斜线
delimiter 可选。如果指定了该参数,它也会被转义。这通常用于转义PCRE函数使用的分隔符。/是最通用的分隔符。

正则表达式特殊字符有:_ . \ + _? [ ^ ] $ ( ) { } = ! < > | : - 返回* 转义后的字符串。

$str = "php点点通是一个学习php的网站,(⊙o⊙)…";
echo preg_quote($str);

echo "<hr />";
$keywords = '$40 for a g3/400';
$keywords = preg_quote($keywords,'/');
echo $keywords;

//preg_quote($word) 用于保持星号原文,使其不使用正则表达式中的特殊语义。
$textbody = "This book is *very* difficult to find.";
$word = "*very*";
$textbody = preg_replace ("/" . preg_quote($word) . "/",
        "<i>" . $word . "</i>",
        $textbody);
echo $textbody;

4、替换匹配模式的所有字符串

mixed preg_replace( mixed pattern,mixed replacement,mixed str [,int limit [,int count]] )

preg_replace()函数会用replacement的内容替换与pattern匹配的所有字符串,并返回修改后的结果

  • pattern/replacement 可以是字符串,也可以是数组
  • limit 指定应当发生多少次匹配。没有设置或是设置-1,就是替换所有。
  • count 总共发生多少了多少次匹配。
$subject='he and hello word and here';
$pattern='/he/';//想匹配单词he
echo preg_match_all($pattern, $subject,$matches);
echo '<pre>';
print_r($matches); 
$replacement = '##';
//echo preg_replace($pattern, $replacement, $subject,-1,$count);
echo preg_replace($pattern, $replacement, $subject,2,$count);
var_dump($count);

//反向引用
$subject = "April 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
//$string = preg_replace($pattern, '\\\\3年\\1月\\2日', $subject);
$string = preg_replace($pattern, '${3}年${1}月${2}日', $subject);
echo $string;

//使用索引数组
$string = "The quick brown fox jumped over the lazy dog.";  
$patterns[0] = "/quick/";  
$patterns[1] = "/brown/";  
$patterns[2] = "/fox/";  
$replacements[2] = "bear";  
$replacements[1] = "black";  
$replacements[0] = "slow";  
print preg_replace($patterns, $replacements, $string);

PHP5.5.0 /e 修饰符已经被弃用了

5、执行一个正则表达式搜索并且使用一个回调进行替换

mixed preg_replace_callback ( mixed pattern , callable callback , mixed subject [, int limit = -1 [, int &count ]]

这个函数的行为除了 可以指定一个 callback 替代 replacement 进行替换 字符串的计算,其他方面等同于 preg_replace()

$str = 'hello_world';
//$string = preg_replace("/([a-z]*)_([a-z]*)/e", "ucfirst('\\1').ucfirst('\\2')", $str);

$callback = function($match){
    return ucfirst($match[1]).ucfirst($match[2]);
};
$string = preg_replace_callback("/([a-z]*)_([a-z]*)/", $callback, $str);
echo $string;




posted @ 2021-09-05 19:59  成文的博客  阅读(42)  评论(0编辑  收藏  举报