linux C正则表达式

在网上找到的一个程序

[c]

#include <stdio.h>

#include <sys/types.h>

#include <regex.h>

 

/* 取子串的函数 */

static char* substr(const char*str,unsigned start, unsigned end)

{

      unsigned n = end - start;

      static char stbuf[256];

      strncpy(stbuf, str + start, n);

      stbuf[n] = 0;

      return stbuf;

}

/* 主程序 */

int main(int argc, char** argv)

{

      char * pattern;

      int x, z, lno = 0, cflags = 0;

      char ebuf[128], lbuf[256];

      regex_t reg;

      regmatch_t pm[10];

      const size_t nmatch = 10;

/* 编译正则表达式*/

      pattern = argv[1]; //获取正则表达式

      z = regcomp(&reg, pattern, cflags); //如果编译成功返回0,其它返回说明有错误产生

      if (z != 0)

      {

             regerror(z, &reg, ebuf, sizeof(ebuf));

             fprintf(stderr, "%s: pattern '%s' /n",ebuf, pattern);

             return 1;

      }

/* 逐行处理输入的数据 */

      while(fgets(lbuf, sizeof(lbuf), stdin))

      {

            ++lno;

//取得读取字符串的长度,并判断字符串结尾字符是否为回车符'/n'。如果是,将结尾字符改为0

            if ((z = strlen(lbuf)) > 0 && lbuf[z-1]== '/n')

                  lbuf[z - 1] = 0;

/* 对每一行应用正则表达式进行匹配 */

           z = regexec(&reg, lbuf, nmatch, pm, 0);

           if (z == REG_NOMATCH) continue;

           else if (z != 0)

           {

                  regerror(z, &reg, ebuf, sizeof(ebuf));

                  fprintf(stderr, "%s: regcom('%s')/n",ebuf, lbuf);

                  return 2;

           }

/* 输出处理结果 */

          for (x = 0; x < nmatch && pm[x].rm_so != -1; ++ x)

          {

//                 if (!x) printf("%04d: %s/n", lno, lbuf);

                 printf(" $%d='%s'/n", x, substr(lbuf,pm[x].rm_so,pm[x].rm_eo));

          }

      }

/* 释放正则表达式 */

     regfree(&reg);

     return 0;

}

[/c]

但是我发现有些正则表达式式却不能很好匹配

例如 文件a中

aadsdfs

asdfasz

adf中adfas

中国adfasd

lskdfo中国

如果用“[a-y]*"就不能匹配“中国adfasd"

 

还在研究中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux正则表达式是一种用来匹配文本内容的表达式,它可以方便地在Linux系统中进行文本处理和搜索。下面是一份Linux正则表达式大全,包括常用的正则表达式语法和示例: 1. 字符匹配 正则表达式语法:字符 示例: * 匹配单个字符: ``` a 匹配'a'字符 ``` * 匹配多个字符: ``` [abc] 匹配'a'、'b'或'c'字符 [^abc] 匹配除'a'、'b'、'c'以外的任意字符 [a-z] 匹配小写字母a到z中的任意一个字符 [A-Z] 匹配大写字母A到Z中的任意一个字符 [0-9] 匹配数字0到9中的任意一个字符 ``` 2. 重复匹配 正则表达式语法:字符+、字符*、字符? 示例: * 匹配多个字符: ``` a+ 匹配一个或多个'a'字符 a* 匹配零个或多个'a'字符 a? 匹配零个或一个'a'字符 ``` 3. 边界匹配 正则表达式语法:^、$ 示例: * 匹配行首和行尾: ``` ^a 匹配以'a'字符开头的行 a$ 匹配以'a'字符结尾的行 ``` 4. 逻辑匹配 正则表达式语法:字符1|字符2 示例: * 匹配两种字符中的任意一种: ``` a|b 匹配'a'或'b'字符 ``` 5. 分组匹配 正则表达式语法:(字符) 示例: * 匹配分组中的字符: ``` (a) 匹配'a'字符 ``` 6. 转义字符 正则表达式语法:\字符 示例: * 匹配特殊字符: ``` \. 匹配'.'字符 \* 匹配'*'字符 \+ 匹配'+'字符 \? 匹配'?'字符 \( 匹配'('字符 \) 匹配')'字符 ``` 以上是Linux正则表达式的常用语法和示例,可以根据实际需求进行学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值