首页 > 其他分享 >2024.11.20 鲜花

2024.11.20 鲜花

时间:2024-11-20 14:18:59浏览次数:1  
标签:regex 2024.11 匹配 鲜花 int 取反 等价 20 REG

正则表达式

核心共振

⚡超越一切震慑凡人⚡

⚡带来终结机械降神⚡

⚡风暴之力充满全身⚡

⚡最后一击核心共振⚡

就是首先你需要知道一些元字符,也就是它的语法。

最基本的几个:

^ $ 分别指定行首和行尾。

[abc] 表示匹配 a,b,c 中的一个,当然长度不限。也有一些符合人类直觉的写法:[a-o] 表示从 a 到 o 的所有小写字母,[1-9] [A-X] 也都是对的。

[^abc] 表示匹配除了 a,b,c 中的一个,将 ^ 放到 [] 里相当于取反。

{a} {a,} {a,b} 分别表示匹配恰好 \(a\) 次,至少 \(a\) 次,\([a,b]\) 次。

. 表示一个任意除回车(\n\r)字符,在某些时候(如 C 中不指定 REG_NEWLINE 时)也会匹配回车。

() 用于划分单元,将其中的内容作为一个单元匹配,可以用 \x 来引用第 \(x\) 段以获取的匹配,如 (.)\1 匹配两个相同字符,在 C++ 中查找时会先储存整个的匹配,再将每段分别储存。

| 就是或,两边有一边成立就匹配。

\b 匹配单词和空格的边界,并不匹配字符。

\B \b 取反。

\f \n \r \t \v 就是字面意思,匹配换页,换行,制表等。

\< \> 分别匹配词首和词尾,分隔符不一定是空格。

会了上面的基本就会所有了,下面的大多都是上面的的等价简略写法。

? 等价 {0,1}

+ 等价 {1,}

\d 等价 [0-9]

\s 匹配不可见,等价 [\f\n\r\t\v]

\w 匹配包括下划线在内的所有单词字符,等价 [0-9A-Za-z_]

\D \S \W 上面那仨的取反。

然后想在 C++ 里用正则表达式,还要学一点语法。

考虑一下速度,boost 的功能强大但有非常“优秀”的速度,C++ 的速度在匹配不上时较快,匹配上时飞慢,而且查找也是飞慢,所以这里建议大家用 C 里的 regex.h,虽然好像只有 linux 能用。

用法就是首先你要引用 <regex.h> 库。

一共两个类型,四个函数:

regex_t:用来存已经编译好的正则表达式。

int regcomp(regex_t &a,const char *s,int t)a 就是用来存的,s 是需要编译的表达式,t 是编译 tag,一共四个,等号后面是它的值:REG_EXTENDED=1 使用更牛的库,一般是要加的,REG_ICASE=2 设置大小写不敏感,REG_NEWLINE 如果不加,默认忽略回车,就会导致 ^ $ 只能匹配第一个和最后一个,且 . 能匹配回车,加上了就完全取反,REG_NOSUB 不返回匹配结果,只返回是否成功匹配。

regmatch_t:用来存匹配结果,.rm_so 表示起点,.rm_eo 是终点加一。

int regexec(regex_t &a,const char *s,size_t x,regmatch_t &c,int t):表示用表达式 a 匹配(或者说查找) sx 是存储个数,会将正串匹配和 \(x-1\) 前个单元的匹配放到 c,若制定了 REG_NOSUB 会忽略;t 是 tag,一共两种,REG_NOTBOL=1 表示禁用 ^REG_NOTEOL=2 表示禁用 $,若指定了 REG_NEWLINE 会忽略,返回值为 \(0\) 表示找到了,为其他表示没找到或出现错误;每次只能匹配第一个,要匹配所有的话写循环每次位移即可。

因为 regcomp 分配了内存,所以在每次编译后都要用 void regfree(regex_t &a) 来释放内存。理论上每次重新编译也要先释放,但是实测不释放也能过,不知道会不会有其他问题。

regerror 是在产生错误后返回错误信息,感觉没啥用,可以自行百度。

有个板子:正则表达式

P

标签:regex,2024.11,匹配,鲜花,int,取反,等价,20,REG
From: https://www.cnblogs.com/xrlong/p/18556515

相关文章

  • [2024.11.20]NOIP 模拟赛
    鲜花:今年又在luogu被卡7级线了。赛时T1看见区间操作还以为是贪心+数据结构,然后再看两眼发现这原来是个伪装的多测。对于每一个元素\(m\),相当于要构造一组\(xA+yB=m\)的\((x,y)\)解,这是扩欧。单纯是不行的,题目上要使得\((|x|+|y|)_{min}\)。但是我忘记了扩欧的通解公......
  • 国标GB28181-2016平台LiteGBS国标GB28181公网直播的视频监控录像一般需要存储多长时间
    在视频监控领域,有许多软件可供选择,但LiteGBS国标GB28181软件以其独特的优势脱颖而出。在功能方面,与一些传统的视频监控软件相比,LiteGBS国标GB28181软件支持的功能更加丰富多样。它不仅具备基本的视频监控直播、录像检索与回看功能,还拥有云台控制、语音对讲、告警上报、平台级联......
  • 国标GB28181-2022平台LiteGBS国标GB28181软件视频监控系统中的常见问题和解决办法
    随着视频监控的普及应用,在使用过程中常常会遇到一些小问题,针对不同的故障情况应采取相应的措施来解决问题。LiteGBS国标GB28181-2022平台具备强大的设备接入能力。它支持GB28181信令服务、ONVIF客户端等多种接入方式,无论是国标设备还是ONVIF设备,都能轻松接入到LiteGBS国标GB2818......
  • 2024-11-20:交替子数组计数。用go语言,给定一个二进制数组 nums, 如果一个子数组中的相邻
    2024-11-20:交替子数组计数。用go语言,给定一个二进制数组nums,如果一个子数组中的相邻元素的值都不相同,我们称这个子数组为交替子数组。请返回数组nums中交替子数组的总数。输入:nums=[0,1,1,1]。输出:5。解释:以下子数组是交替子数组:[0]、[1]、[1]、[1]以及[0,1]。......
  • 2024年入职/转行网络安全,该如何规划?_网络安全职业规划
     前言前段时间,知名机构麦可思研究院发布了 《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,其中,信息安全位列第一。网络安全前景对于网络安全的发展与就业前景,想必无需我多言,作为当下应届生收入较高的专业之一,网络安全同样也在转行领域中占据热门位置,主要......
  • CF2025
    更好的观看体验:HereA你要生成两个字符串。起初有两个空串,你可以在任意一个后加任意字母,或者把一个串复制并覆盖掉另一个串。求最小操作次数,使得两个串和给定的两个串相同。$n,m\le100$注意到覆盖操作显然只会发生至多一次。故覆盖lcp是最优的。值得注意的是,可以不覆盖......
  • 2024最新网络安全自学路线,内容涵盖3-5年技能提升
     01什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也......
  • 2024年阿里云年终活动内容详解,阿里云双十一活动参与攻略
    2024年阿里云年终活动内容详解,阿里云双十一活动参与攻略。要参与2024年阿里云双十一活动,您可以按照以下步骤进行:一、前期准备注册/登录阿里云账号访问阿里云官网,根据页面提示完成账号注册或登录。了解活动信息在阿里云官网的活动页面或相关公告中,了解双十一活动的具体信......
  • 2024年腾讯云双11大促,轻量服务器特惠
    云产品双十一活动持续进行中,腾讯云服务器价格多少钱?腾讯云双十一服务器多少钱一年?腾讯云双十一服务器多少钱一个月?一个腾讯云双十一服务器多少钱?腾讯云双十一活动服务器年付、月付租用价格配置表在哪里查看?2024年腾讯云双十一活动的入口在哪里?2024年腾讯云双十一活动时间是什么......
  • 2024.11.19随笔&联考总结
    联考看到T1就知道一定是简单计数题然后发现\(O(n)\)可以过于是就大概写了写式子就开写。写的过程中犯了一些低级错误,代码重构了一次才过。耽误的时间比较久。然后开T2,一眼有一个\(O(n^2)\)的dp。然后考虑优化,但是记录下标必须再带一个信息所以无论怎么优化都不能到\(O(n......