一个通用的php正则表达式匹配或检测或提取特定字符类

在php开发时,日常不可或缺地会用到正则表达式,可每次都要重新写,有时忘记了某一函数还要翻查手册,所以,抽空写了一个关于日常所用到的正则表达式区配类,便于随便移置调用.(^_^有点偷懒).

/*/////////////////////////////////////////////////////////////
* 类MatchAll功能:主要用于php日常所用到的几种检测匹配或提取特定字符.//
* 主要参数设置说明: $target_str 为目标字符即需要检测的字符或数字。//
* $isFind true:提取出匹配字符;false:单纯检测是否存在特定字符.  //
* $isTotal true: 完全匹配模式;false:部分匹配模式.           //
* @author: purpen                                      //
* @email: [email protected]                          //
* @data: 2007-07-29                                  //
*/////////////////////////////////////////////////////
class MatchAll {
    /**
     * 功能: 用于检测IP地址是否合法或从字符串中提取IP字符.
     *
     * @param string $target_str
     * @param boolean $isFind
     * @param boolean $isTotal
     * @return mixed
     */
    public static function IP_match($target_str, $isFind=false, $isTotal=false) {
        //采取的匹配模式
        if ($isTotal == true) {
            $pattern = "/^(\d{1,3}\.){3}\d{1,3}$/";
        }else{
            $pattern = "/(\d{1,3}\.){3}\d{1,3}/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能: 用于检测身份证号是否合法或从字符串中提取出身份证号字符.
     *
     * @param mixed $target_str
     * @param boolean $isFind
     * @param boolean $isTotal
     * @return mixed
     */
    public static function IDCard_match($target_str, $isFind=false, $isTotal=false){
        //采取的匹配模式
        if ($isTotal == true){
            $pattern = "/^(\d{18}|\d{17}X|\d{15})$/";
        }else{
            $pattern = "/(\d{18}|\d{17}X|\d{15})/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能: 用于检测电话号码是否合法或从字符长串中提取出电话号码.
     * @param mixed $target_str
     * (例如: 010-87965421、(010)87965421、87965421、0394-5568447、(0394)5568447、5568447)
     * @param boolean $isFind
     * @param boolean $isTotal
     * @return mixed
     */
    public static function phone_match($target_str, $isFind=false, $isTotal=false) {
        //采用匹配模式
        if ($isTotal == true) {
            $pattern = "/^((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}$/";
        }else{
            $pattern = "/((\(?\d{3,4}\))?|(\d{3,4}-)?)\d{7,8}/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能:用于检测邮政编码是否合法或从字符长串中提取出邮政编码字符.
     *
     * @param mixed $target_str
     * @param boolean $isFind
     * @param boolean $isTotal
     * @return mixed
     */
    public static function postalcode_match($target_str, $isFind=false, $isTotal=false) {
        //采取的匹配模式
        if ($isTotal == true) {
            $pattern = "/^\d{6}$/";
        }else{
            $pattern = "/\d{6}/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能: 用于完全匹配、部队匹配或提出网络url的方法.
     * @param string $target_str
     * @param boolean $isFind 是否提取出匹配目标
     * @param boolean $isTotal 是否完全匹配
     * @return mixed
     */
    public static function neturl_match ($target_str, $isFind=false, $isTotal=false) {
        //采用的匹配模式
        if ($isTotal == true) {
            $pattern = "/^(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*.+$/";
        }else{
            $pattern = "/(http\:\/\/)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能: 用于检测email是否合法或从字符串中提取出email字符串.
     * @param string $target_str
     * @param boolean $isFind 是否提取出字符串
     * @param boolean $isTotal是否完全匹配
     * @return mixed
     */
    public static function email_match ($target_str, $isFind=false, $isTotal=false){
        //采取的匹配模式
        if ($isTotal == true){
            $pattern = "/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*$/";
        }else{
            $pattern = "/[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能:用于完全匹配、部分匹配或提取出钱币数字的方法.
     * @param mixed $target_str
     * @param boolean $isFind
     * @param boolean $isTotal
     * @return mixed
     */
    public static function money_match($target_str, $isFind=false, $isTotal=false) {
        //采用完全匹配
        if ($isTotal == true) {
            $pattern = "/^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?$/";
        }else{//部分匹配
            $pattern = "/[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?/";
        }
        return self::get_match_result($target_str, $pattern, $isFind);
    }
    /**
     * 功能:开始匹配目标字符串动作.
     *
     * @param mixed $target_str
     * @param string $pattern
     * @param boolean $isFind
     * @return mixed
     */
    public function get_match_result($target_str, $pattern, $isFind) {
        //是否提取出匹配目标
        if ($isFind == true) {
            preg_match($pattern, $target_str, $result);
        }else{
            $result = preg_match($pattern, $target_str);
        }
        return $result;
    }
    /**
     * 功能: 用于匹配测试
     * @param str $target_str //$target_str = "select a, b, c, d from d";
     */
    public function all_match($target_str) {
        $pattern = "/select(.+)from(\s[a-zA-Z0-9])/i";
        preg_match($pattern, $target_str, $result);
        $fields = split(",", $result[1]);
        print $result[2];
        print "";
        return $fields;
    }
}
时间: 2024-10-09 19:27:21

一个通用的php正则表达式匹配或检测或提取特定字符类的相关文章

正则表达式匹配包括换行符的所有字符

今天在Java中想使用正则表达式来获取一段文本中的任意字符. (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符. 查出了一个解决办法,经过一试,果然可以匹配包括换行符在内的任意字符,以下为正确的正则表达式匹配规则: ([\s\S]*)正则表达式匹配包括换行符的所有字符,布布扣,bubuko.com

正则表达式的使用,字符串提取,字符串匹配(C#语言)

在程序中常常设计字符串的处理,比如①:判断用户的输入字符串是否符合要求,是否是非法字符串,②:取出一个很复杂字符串的某一程序中需要的部分等 这事用自己写算法判断通常是十分困难的,所以遇到字符串的处理时要很快想到用正则表达式. 一:正则表达式元字符 •要想学会正则表达式,理解元字符是一个必须攻克的难关.不用刻意记 •.:匹配任何单个字符.例如正则表达式“b.g”能匹配如下字符串:“big”.“bug”.“b g”,但是不匹配“buug”,“b..g”可以匹配“buug”. •[ ] :匹配括号中的

oracle 正则表达式 匹配

oracle 正则表达式 在实际应用中,想排除带有中文的字段值: select h.froomnumber from t_broker_house h where REGEXP_LIKE(froomnumber,'^([a-z0-9A-Z]|-)*$') 字符串’^198[0-9]$’可以匹配‘1980-1989’,如果希望统计出公司那些员工是80年-89年入职的,就可以使用如下的SQL语句: select * from emp e where regexp_like(to_char( e.hi

刷题——正则表达式匹配

首先看题题目 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串. 说明: s 可能为空,且只包含从 a-z 的小写字母. p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *. 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a&quo

10. 正则表达式匹配

/*给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串. 说明 : s 可能为空,且只包含从 a - z 的小写字母. p 可能为空,且只包含从 a - z 的小写字母,以及字符 .和 *. 示例 1 : 输入 : s = "aa" p = "a" 输出 : false 解释 : "a&

推荐一个不错的抓取匹配源码的正则表达式网站

在线网址:http://regexpal.com/ 本人用于抓取匹配的源码,更多功能自己研究. 推荐一个不错的抓取匹配源码的正则表达式网站,布布扣,bubuko.com

正则表达式 - 匹配规则

正则表达式 - 匹配规则 基本模式匹配 一切从最基本的开始.模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符.模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符.重复出现,或表示上下文.例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串.例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配

正则表达式匹配规则及示例

正则表达式 - 匹配规则 基本模式匹配 一切从最基本的开始.模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符.模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符.重复出现,或表示上下文.例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串.例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配

兄弟连学Python(06)---- 正则表达式匹配规则

正则表达式 - 匹配规则 基本模式匹配 一切从最基本的开始.模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符.模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符.重复出现,或表示上下文.例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串.例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配