PHP手册整理 - 函数【内置函数(正则函数)】

preg_match 函数:

// preg_match 执行匹配正则表达式
// 参数说明:
//         $pattern   必传参数,正则表达式,字符串类型
//         $subject   必传参数,进行匹配的字符串
//         &$matches  可选参数,匹配完整结果,$matches[0]将包含完整模式匹配到的文本,
//                    $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推
//         $flags     可选参数,匹配返回时会附加字符串偏移量(PREG_OFFSET_CAPTURE)。
//         $offset    可选参数,搜索目标字符串的开始位置
// 返回值说明: 返回匹配次数,在第一次匹配后将会停止搜索,发生错误返回 FALSE。 

// 实例-1
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches);
print_r($matches);
// 输出:
// Array
// (
//     [0] => foobarbaz
//     [1] => foo
//     [2] => bar
//     [3] => baz
// )

// 实例-2
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [0] => foobarbaz
//             [1] => 0
//         )
//     [1] => Array
//         (
//            [0] => foo
//            [1] => 0
//         )
//     [2] => Array
//         (
//             [0] => bar
//             [1] => 3
//         )
//     [3] => Array
//         (
//             [0] => baz
//             [1] => 6
//         )
// )

// 实例-3
$subject = "abcdef";
$pattern = '/^def/';

// 匹配失败,因为$pattern可以包含断言比如^, $ 或者(?<=x)。
// preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);

preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
// Array
// (
//     [0] => Array
//         (
//             [0] => def
//             [1] => 0
//         )
// )

// 实例 - 4
// 模式中的\b标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配
// 单词的部分内容比如"webbing" 或 "cobweb"
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";     // 输出当前值 
} else {
    echo "A match was not found.";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found."; // 输出当前值
}

// 实例 - 5
preg_match('@^(?:http://)?([^/]+)@i', "http://www.php.net/index.html", $matches);
$host = $matches[1];
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n"; // 输出:domain name is: php.net


preg_match_all 函数:

// preg_match_all  执行一个全局正则表达式匹配
// 参数说明:
//         $pattern   必传参数,正则表达式,字符串类型
//         $subject   必传参数,进行匹配的字符串
//         &$matches  可选参数,多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定
//         $flags     可选参数,(PREG_PATTERN_ORDER、PREG_OFFSET_CAPTURE、 PREG_SET_ORDER)
//                    PREG_PATTERN_ORDER:结果排序为$matches[0]保存完整模式的所有匹配,
//                    $matches[1] 保存第一个子组的所有匹配,以此类推;
//                    PREG_SET_ORDER:结果排序为$matches[0]包含第一次匹配得到的所有匹配,
//                    $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推
//         $offset    可选参数,搜索目标字符串的开始位置
// 返回值说明: 完整匹配次数(可能是0),或者如果发生错误返回FALSE 

// 实例-1
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";

preg_split 函数:

// preg_split 通过一个正则表达式分隔字符串
// 参数说明:
//         $pattern   必传参数,正则表达式,字符串类型
//         $subject   必传参数,进行匹配的字符串
//         $limit     可选参数,限制分隔得到的字符串,返回的最后一个子串将包含所有剩余部分;
//         $flags     可选参数,(PREG_SPLIT_NO_EMPTY、PREG_SPLIT_DELIM_CAPTURE、 PREG_SPLIT_OFFSET_CAPTURE)
//                    PREG_SPLIT_NO_EMPTY:返回分隔后的非空部分
//                    PREG_SPLIT_DELIM_CAPTURE:用于分隔的模式中的括号表达式将被捕获并返回
//                    PREG_SPLIT_OFFSET_CAPTURE:对于每一个出现的匹配返回时将会附加字符串偏移量
// 返回值说明: 返回分割后子串组成的数组, 或者在失败时返回 FALSE 

// 实例-1
// 使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);

preg_grep 函数:

// preg_grep 返回匹配模式的数组条目
// 参数说明:
//         $pattern   必传参数,正则表达式,字符串类型
//         $input     必传参数,输入数组
//         $flags     可选参数,PREG_GREP_INVERT
//                    PREG_GREP_INVERT:返回输入数组中不匹配的数组元素
// 返回值说明: 返回匹配到的索引数组

// 实例-1
// 返回所有包含浮点数的元素
$arr = ['1.25','this',10];
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $arr);
var_dump($fl_array);


preg_replace_callback 函数:

// preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换
// preg_grep 返回匹配模式的数组条目
// 参数说明:
//         $pattern   必传参数,正则表达式,字符串类型
//         $callback  必传参数,每次需要替换时调用,调用时函数得到的参数是匹配到的结果
//         $subject   必传参数,要搜索替换的目标字符串或字符串数组
//         $limit     可选参数,最大可替换次数,默认是-1(无限制)
//         &$count    可选参数,替换执行的次数
// 返回值说明: 如果subject是一个数组, 返回一个数组,其他情况返回字符串,错误发生时返回 NULL

// 实例-1
$text = "April fools day is 04/01/2002\n";
$text.= "Last christmas was 12/24/2001\n";
function next_year($matches)
{
  return $matches[1].($matches[2]+1);
}
echo preg_replace_callback(
            "|(\d{2}/\d{2}/)(\d{4})|",
            "next_year",
            $text);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值