gpt4 book ai didi

c++ - 返回字符串中模式的所有非重叠匹配项

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:34 25 4
gpt4 key购买 nike

在 Python 中,我可以使用 re.findall(pattern, string) 返回字符串中模式的所有非重叠匹配项。

例如,在下面的 SVG 路径命令中:

import re
spam = "M317.0,169.7C311.1,170.5 285.7,146.8 300.7,178.57 L 321.4,175.01"
eggs = re.findall("([A-Za-z]|-?[0-9]+\.?[0-9]*(?:e-?[0-9]*)?)", spam)
print(eggs)
['M', '317.0', '169.7', 'C', '311.1', '170.5', '285.7', '146.8', '300.7', '178.5', 'L', '321.4', '175.0']

在 C 或 C++ 中是否有一种轻量级、干净且高效的方法来执行这种类型的正则表达式模式匹配?请注意,我不是在寻找依赖于 Boost 的解决方案。理想情况下,我想尽量减少依赖性并保持我的代码精简...

最佳答案

SLRE - 超轻正则​​表达式库

SLRE是一个 ANSI C 库,它实现了 Perl 正则表达式的一小部分。它主要针对想要解析配置文件的开发人员,其中速度并不重要。它位于单个 .c 文件中,可根据自定义需求轻松修改。例如,如果要引入一个新的元字符“\i”,意思是“IP 地址”,这样做很容易。特点

* 跨平台 - 纯 ANSI C
* 非常简单的 API
* 轻量级:编译时大约 5kB 的代码
* 不使用动态内存分配
* 线程安全

支持的 RE 语法

^ 匹配缓冲区的开头
$ 匹配缓冲区的结尾
() 分组和子串捕获
[...] 匹配集合中的任意字符
[^...] 匹配除集合中的字符以外的任何字符
\s 匹配空格
\S 匹配非空白
\d匹配小数位
\r匹配回车
\n 匹配换行符
+ 匹配一次或多次(贪心)
+?匹配一次或多次(非贪婪)
* 匹配零次或多次(贪心)
*?匹配零次或多次(非贪婪)
?匹配零次或一次
\xDD 匹配十六进制值为 0xDD 的字节
\meta 匹配元字符之一:^$().[*+?\

/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* Sergey Lyubka wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return.
* ----------------------------------------------------------------------------
*/

关于c++ - 返回字符串中模式的所有非重叠匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com