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++ 正则检测字串,提取数字以及字符的主要内容,如果未能解决你的问题,请参考以下文章