电话号码及日期时间提取(正则表达式 C语言)

本文介绍了如何利用C语言结合正则表达式进行电话号码和日期时间的提取,通过示例代码阐述关键实现步骤。
摘要由CSDN通过智能技术生成

直接看代码:

PhoneDateExtract.h

/**
  \brief A define file.
  \filename : PhoneDateExtract.h
  \date     : 24-Mar-2011.
  \version  : 0.1.1
  			: 0.1.2 (modify in 2011-10-08 as 400/800 phone numbers)
  \author   : Guohua
 */

#ifndef __PHONE_DATE_EXTRACT_H__
#define __PHONE_DATE_EXTRACT_H__

/** 
 * @biref 中国大陆区域通用电话号码提取
 * 正则表达式说明如下
 *  (
 * 	 ([0-9]{11}) // 11位手机号码
 * 	 |
 * 	 (
 * 	 	(400|800)([0-9\\-]{7,10}) // 400或800号码
 * 	 	|(([0-9]{4}|[0-9]{3})(-| )?)?([0-9]{7,8})((-| |转)*([0-9]{1,4}))? // 固定电话号码
 * 	 )
 *  )
 * @demo
 *  char* phone = NULL;
 *  phone_extract("2011年3月7日 14:03", &phone);
 *  printf("format phone = [%s]\n", phone);
 *  free(phone);
 *  @param str 待处理的字符串
 * @param phone [output] 提取出的电话号码子串(要注意在外面释放其堆内存)
 * @return 返回0表示成功,否则出错。
 */
int phone_extract(const char* str, char** phone);

/**
 * @biref 简体中文文本网页时间提取
 * 正则表达式说明如下
 * [0-9]{2,4}(-|/|年)			//年份
 * [0-9]{1,2}(-|/|月)			//月份
 * [0-9]{1,2}					//日
 * [0-9]{1,2}					//小时
 * :[0-9]{1,2}					//分钟
 * (:[0-9]{1,2})?				//钞
 * @demo
 *  char* datetime = NULL;
 *  datetime_extract("2011年3月7日 14:03", &datetime);
 *  printf("format datetime = [%s]\n", datetime);
 *  free(datetime);
 * @param str 待处理的字符串
 * @param date [output] 提取出的日期时间子串,
 * 其格式为“yy-MM-dd hh-mm-ss”的字符串(要注意在外面释放其堆内存)
 * @return 返回0表示成功,否则出错。
 */
int datetime_extract(const char* str, char** date);

#endif // __PHONE_DATE_EXTRACT_H__



源文件PhoneDateExtract.c

#include "PhoneDateExtract.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <regex.h>

#define return_if_fail(expr, val) \
do { \
    if (!(expr)) return val; \
}while(0);

/** 
 * @biref 字符串取子串
 * @param str 原始字符串
REEC是一个精简,高效的C语言正则表达式引擎,它使得C语言开发中支持正则表达式,目前已经进化到了1.2.0版本,可以说无论从功能上,还是效率都到达了很好的应用水平,该引擎除支持常用的正则标准之外,还有一些原创的特性,例如正则式的分组、模式敏感等级等等,使得正则表达式更加灵活多变。 编者: 这套正则表达式适用于内存稀少的嵌入式系统,从09年应用至今,据我们所了解的REEC已经在商用产品中做到了千万终端的应用,性能跟稳定性已经过了市场考验。   引擎特性 含义:至少匹配1个,并且至多匹配n个字母。 含义:匹配1个数字。 含义:匹配n个数字。 含义:至少匹配1个,并且至多匹配一个数字。 含义:至少匹配1个,并且至多匹配n个数字。 含义:匹配1个symbol,symbol长度跟取值范围不限。 含义:匹配n个symbol,symbol长度跟取值范围不限。 含义:至少匹配1个,并且至多匹配一个symbol,symbol长度跟取值范围不限。 }> 含义:至少匹配1个,并且至多匹配n个symbol,symbol长度跟取值范围不限。 含义:匹配1个任意字符。 含义:匹配n个任意字符。 含义:至少匹配1个,并且至多匹配一个任意字符。 含义:至少匹配1个,并且至多匹配n个任意字符。 含义:匹配1个小写字母或数字。 含义:匹配n个小写字母或数字。 含义:至少匹配1个,并且至多匹配一个小写字母或数字。 含义:至少匹配1个,并且至多匹配n个小写字母或数字。 含义:匹配1个大写字母或数字。 含义:匹配n个大写字母或数字。 含义:至少匹配1个,并且至多匹配一个大写字母或数字。 含义:至少匹配1个,并且至多匹配n个大写字母或数字。 含义:匹配1个字母或数字。 含义:匹配n个字母或数字。 含义:至少匹配1个,并且至多匹配一个字母或数字。 含义:至少匹配1个,并且至多匹配n个字母或数字。 例子 表达式:[|][|][] 模式串:"54233你好23322323sdafashaha323hasdf你,本次哈哈你好你好哈哈123456哈235" 返回值:“123456”   其它 RO RW段共10KB。  RAM 标签:REEC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值