免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1271 | 回复: 9
打印 上一主题 下一主题

谁比较熟悉C下的正则表达式编程,帮个忙 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-19 13:40 |只看该作者 |倒序浏览
<a href=get.php?action=xianshi&dd=168552 title='中国文字: 08-18 19:05'>;目标字符</a>;</td>;<td width=14%>;<img src='./sdfs/2.gif' align='absbottom'>;</a>;

<a href=get.php?action=xianshi&dd=168121 title='中文字: 08-18 19:05'>;目标字符</a>;</td>;<td width=14%>;<img src='./sdfs/6.gif' align='absbottom'>;</a>;

<a href=get.php?action=xianshi&dd=168521 title='文字: 08-18 19:05'>;目标字符</a>;</td>;<td width=14%>;<img src='./sdfs/3.gif' align='absbottom'>;</a>;

有很多这样的连接(我只列了2个),我想把上面所有的“目标字符”,取出来?用C下的正则库。regcomp regexec

请教高手,我应该如何做。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-08-19 13:46 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

什么平台?

论坛徽章:
0
3 [报告]
发表于 2004-08-19 13:48 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

如果是C函数库,我想什么平台都可以吧。

我现在是linux平台

论坛徽章:
0
4 [报告]
发表于 2004-08-19 14:46 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

在线等!清高手赐教

论坛徽章:
0
5 [报告]
发表于 2004-08-19 15:02 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// 功能说明 : 对单行进行匹配并返回匹配值
  3. /// 输入参数 : szLine    行字符串
  4. ///          : szPattern 行模式
  5. /// 输出参数 : szValue, 若不为NULL,则返回匹配值
  6. /// 返回值   : bool
  7. /// 使用说明 :
  8. ///////////////////////////////////////////////////////////////////////////////
  9. bool StrMatchLine ( const char *szLine, const char *szPattern, char *szValue )
  10. {
  11.    int nRet = 0, cFlags = 0;                       ///<
  12.    regex_t regVar;                                 ///<
  13.    regmatch_t regMatch[1];                         ///< 匹配结果
  14.    const size_t nMatch = 1;                        ///< 1 个MATCH
  15.    char szErr[256] = "";                           ///< 错误信息
  16.    
  17.    if ( szLine == NULL || szPattern == NULL )
  18.       return false;
  19.    
  20.    nRet = regcomp ( &regVar, szPattern, cFlags );
  21.    if ( nRet != 0 )
  22.    {
  23.       regerror ( nRet, &regVar, szErr, sizeof(szErr) );
  24.       //TraceLog ( stdout, __LINE__, "", __FILE__, "Pattern : %s, regcomp error %s", szErr );
  25.    }
  26.    
  27.    nRet = regexec ( &regVar, szLine, nMatch, regMatch, 0 );
  28.    if ( nRet == REG_NOMATCH)                       ///< 不匹配
  29.    {
  30.       regfree(&regVar);
  31.       return false;
  32.    }
  33.    else if ( nRet != 0 )                           ///< 执行匹配出错
  34.    {
  35.       regerror ( nRet, &regVar, szErr, sizeof(szErr) );
  36.       //TraceLog ( stdout, __LINE__, "", __FILE__, "Line %s, regexec error %s\n", szLine, szErr );
  37.       regfree(&regVar);
  38.       return false;
  39.    }
  40.    
  41.    if ( szValue != NULL )                          ///< 获取子字符串
  42.    {
  43.       int nLen = regMatch[0].rm_eo - regMatch[0].rm_so;
  44.       strncpy ( szValue, szLine + regMatch[0].rm_so, nLen );
  45.       szValue[nLen] = '\0';
  46.    }
  47.    
  48.    regfree(&regVar);                               /// 释放正则表达式
  49.    return true;
  50. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2004-08-19 15:09 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

谢谢 windflowers1976
你的代码是实现一次匹配的。

我想知道,如果我的数据里面有多个同类型的数据,我是否只能够多次调用你给的函数,还是,有别的更好的方法实现。

在次请教

论坛徽章:
0
7 [报告]
发表于 2004-08-19 15:10 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

对了,我不太熟悉正则,能否把上面的正则给写一下。谢谢。

论坛徽章:
0
8 [报告]
发表于 2004-08-19 15:13 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

正则表达式的写法去查查书,讲SHELL书上都有,UNIX强大的特性之一是文本匹配。
你问的是标准的C函数,差不多只能做到那样了。更强的匹配与复杂的抽取去用boost::regex。

论坛徽章:
0
9 [报告]
发表于 2004-08-19 15:17 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

再次谢谢 windflowers1976

我已经知道了。呵呵。在你这个得到了答案。

论坛徽章:
0
10 [报告]
发表于 2004-08-19 17:06 |只看该作者

谁比较熟悉C下的正则表达式编程,帮个忙

以前正则表达式,都是抄别人的,然后自己该改,只能够做到知其然,不知其所以。而且,脚本的正则和C的正则,有些不一样,C上的估计还要考虑C的习惯。
刚才学习了一下正则表达式,领会了一些关于C下用正则与脚本的不同。

高兴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP