正则表达式与Regex函数

影响使用正则表达式的因素:
  C语言中使用strstr或strcmp函数(需要确定字符串中含有此子串)进行字符串匹配,匹配效率较低,且两个函数均为绝对匹配,灵活性较差。

  正则表达式通过数据的规则,匹配提取数据


正则表达式的匹配方式,工作流程

正则表达式字符串:
  用于描述数据规则的字符串,由一系列特殊符号组成的逻辑语句

Linux下常用的两种正则方式,命令使用正则和函数使用正则。
  grep命令(grep “正则表达式” filename)regex族函数

正则表达式基础:特殊符号的含义

  \ : 转义符(有特殊含义的字符需要转义)
  * : 以前一个字符为参照,匹配该字符0次或多次
  ^ : 以后一个字符为参照,表示行首
  $ : 以前一个字符为参照,表示行尾
  . :表示任意字符出现一次
  + :以前一个字符为参照,匹配该字符一次或多次(需要转义\+)
  ? :表示任意字符出现0次或1次(需要转义\?)
  [ ] :表示集合,只代表集合中的一个字符
  [^] :代表该集合取非
  | :逻辑或 [a|b|c|d](只有在集合中使用不需要转义)
  {n} :以前一个字符为参照,表示该字符连续出现的频率(需要转义)
  {n,} :以前一个字符为参照,表示该字符最少连续出现n次,最多出现无数次(需要转义)
  {n,m} :以前一个字符为参照,表示该字符最少出现n次,最多出现m次(需要转义)
  () :可以自定义数据范围(需要转义)


举例:

  以h开头o结尾的任意字符串,“^h.*o$”

  手机号的正则表达式,“^1[3-8]\{1\}[0-9]\{9\}$”


使用正则函数,匹配抽取关键数据

C标准库正则函数:

  regex_t 正则类型

  regcomp(regex_t* reg, char* regstring, int flags); \\使用正则字符串,生成正则类型

  regexec(regex_t* reg, char* string,int nmatch, rematch_t,int flags);\\使用正则类型,在文本中进行匹配抽取数据,每次返回一条结果

  regfree(regex_t* preg);\\释放正则类型

  regerror(int errcode, const regex_t* preg, char* errbuf,size_t errbuf_size);\\对正则函数进行错误处理

For example:
  <a href=“sina.news.com/cs/dd/2020/text.shtml”>链接标题</a>

正则:使用括号划分子表达式

  父表达式:

<a\\[^>\\]\\+\\?href=\\(\\[^\"\\]\\+\\?\.shtml\\)\"\\[^>\\]\\+\\?>\\(\\[^<\\]\\+\\?\\)</a>

  子表达式1:

[^"]+?\.shtml \\匹配抽取链接

  子表达式2:

[^<]+? \\匹配抽取标题

默认情况下为贪婪模式工作

+?为非贪婪工作模式

regexec(regex_t* reg,char* string,size_t nmatch,rematch_t* pmatch,int eflags);

参数3表达式数量,父表达式与子表达式的总数

参数4传出的位置数组,便于抽取关键数据,位置数组长度与表达式数量一致

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌霄online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值