C++ 正则检测字串,提取数字以及字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 正则检测字串,提取数字以及字符相关的知识,希望对你有一定的参考价值。

比如源字串“返回dpf9183h==D13D**&#@p9hLH8D91HAD1313D”
使用正则表达式 匹配其中的数字以及'='
输出结果为9183==139891....

首先,你必须要有正则表达式库可以用。这里使用最新的c++语法,因此标准库中有正则表达式可用。

#include <regex>
#include <iostream>
#include <string>
#include <iterator>

int main() 
    using iterator_t = std::sregex_token_iterator;
    std::string const str "返回dpf9183h == D13D**&#@p9hLH8D91HAD1313D" ;
    std::regex reg R"([\\d=]*)" ;

    std::copy(iterator_t str.cbegin(), str.cend(), reg , iterator_t, std::ostream_iterator<std::string>std::cout);
    std::cout << "\\n";

    return 0;

在线演示http://coliru.stacked-crooked.com/a/ed43a5075b43ab2e

参考技术A

首先,你必须要有正则表达式库可以用。这里使用最新的c++语法,因此标准库中有正则表达式可用。

#include <regex>
#include <iostream>
#include <string>
#include <iterator>
 
int main() 
    using iterator_t = std::sregex_token_iterator;
    std::string const str "返回dpf9183h == D13D**&#@p9hLH8D91HAD1313D" ;
    std::regex reg R"([\\d=]*)" ;
 
    std::copy(iterator_t str.cbegin(), str.cend(), reg , iterator_t, std::ostream_iterator<std::string>std::cout);
    std::cout << "\\n";
 
    return 0;

一个通用的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;   
    }   
}

以上是关于C++ 正则检测字串,提取数字以及字符的主要内容,如果未能解决你的问题,请参考以下文章

Java 判断以数字开头的字串的正则表示式怎么写?

正则表达式怎么匹配前面紧跟某个字符串的字符

正则表达式:数字开头中间字母结尾数字

批处理如何用正则提取字符串中间的数字,和结尾的数字

C++ 正则表达式提取子字符串

正则表达式小结