PHP的正则

来源:互联网 发布:json对象解析成列表 编辑:程序博客网 时间:2024/05/01 21:50

之前看过很多遍正则30钟,然而并没有练习,所以一点进步都没有,现在来总结一下这个晚上我看的吧…..

<?php/** * preg_filter() * @var string */// $subject = 'njks41854415ddf'; // $pattern = '/5/'; // $replace = 'ba'; // echo "preg_filter returns\n";// print_r(preg_filter($pattern, $replace, $subject)); // echo "\n";// echo "preg_replace returns\n";// print_r(preg_replace($pattern, $replace, $subject)); /** * preg_grep()   仅用于数组  * @var array */// $subjects = array("Mechanical Engineering", "Medicine",  "Social Science", "Agriculture",   "Commercial Science", "Politics"  ); // //匹配所有仅由有一个单词组成的科目名  // $alonewords = preg_grep("/^[a-z]*$/i", $subjects);  // var_dump($alonewords);/** * preg_last_error() 返回错误代码 */// preg_match('/(?:\D+|<\d+>)*[!?]/', 'foobar foobar foobar');// if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {//     print 'Backtrack limit was exhausted!';// }/** * preg_match_all()   执行一个全局正则表达式的匹配 * PREG_PATTERN_ORDER和PREG_SET_ORDER不可同时出现 *  *///PREG_PATTERN_ORDER模式/*preg_match_all("|<[^>]+>(.*)</[^>]+>|U",    "<b>example: </b><div align=left>this is a test</div>",    $out, PREG_PATTERN_ORDER);echo $out[0][0] . ", " . $out[0][1] . "\n";echo $out[1][0] . ", " . $out[1][1] . "\n";*//*  结果:<b>example: </b>, <div align=left>this is a test</div>example: , this is a test*///PREG_SET_ORDER模式/*preg_match_all("|<[^>]+>(.*)</[^>]+>|U",    "<b>example: </b><div align=\"left\">this is a test</div>",    $out, PREG_SET_ORDER);echo $out[0][0] . ", " . $out[0][1] . "\n";echo $out[1][0] . ", " . $out[1][1] . "\n";*//*结果:<b>example: </b>, example: <div align="left">this is a test</div>, this is a test*//** * preg_match()   只搜索0/1次 *//*$subject = "abcdef";$pattern = '/^def/';preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);print_r($matches);  //啥也匹配不了$rest = substr("abcdef", 1);   //从第二位开始print_r($rest."\n");$subject = "abcdef";$pattern = '/^def/';preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);   //成功匹配到defprint_r($matches);*//*$textbody = "This book is *very* difficult to find.";$word = "*very*";$textbody = preg_replace ("/" . preg_quote($word) . "/", "<i>" . $word . "</i>", $textbody);     //preg_quote()  保持星号原含义print_r($textbody);*//** * preg_replace_callback();   * @var string */$input = "plain [indent] deep [indent] deeper [/indent] deep [/indent] plain";function parseTagsRecursive($input){     /* 译注: 对此正则表达式分段分析     * 首尾两个#是正则分隔符     * \[indent] 匹配一个原文的[indent]     * ((?:[^[]|\[(?!/?indent])|(?R))+)分析:     *   (?:[^[]|\[(?!/?indent])分析:     *  首先它是一个非捕获子组     *   两个可选路径, 一个是非[字符, 另一个是[字符但后面紧跟着不是/indent或indent.     *   (?R) 正则表达式递归     *     \[/indent] 匹配结束的[/indent]     *//*    $regex = '#\[indent]((?:[^[]|\[(?!/?indent])|(?R))+)\[/indent]#';    if (is_array($input)) {        $input = '<div style="margin-left: 10px">'.$input[1].'</div>';    }    return preg_replace_callback($regex, 'parseTagsRecursive', $input);}$output = parseTagsRecursive($input);echo $output;*//** * preg_split()    通过一个正则表达式分隔字符串 *///使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语$keywords = preg_split("/[\s,]+/", "hypertext language, programming");print_r($keywords);        //结果:Array ( [0] => hypertext [1] => language [2] => programming )

就是这些啦,只是把PCRE函数库里面的函数都过了一遍,然而正则其他的一些细节还没仔细看看,现在就先贴在这儿吧,有空再来看看

0 0