给定一个 C++ std 正则表达式,有没有办法弄清楚该正则表达式会搜索什么?取出构造时放入的字符串?
我已经看到了https://en.cppreference.com/w/cpp/regex/basic_regex,这里没有列出任何有用的内容。我唯一能做的就是生成每个可能的字符串并查看匹配的内容,但这似乎是一个疯狂的解决方案。无论我搜索文本多长时间,sizeof(regex) 都是一个常量 32,所以一些滥用的内存操作是不可能的。我尝试过转换为字符串和 char *s,认为有关它的大多数其他细节可能会在编译时已知,并且看起来会在类型中进行处理。这感觉像是应该可行的事情。我不拥有大型代码库,所以做一些类似将正则表达式包装在一个类中的事情,该类可以隐式转换为正则表达式,但也将搜索单独存储为字符串是不可能的。
这里似乎对什么是“正则表达式”存在根本性的误解。正则表达式是表示模式的“有向图”。当您将其应用于字符串时,您所做的只是通过成功遍历图形来测试字符串是否与模式匹配。 人类喜欢便利。必须手动构建图表,或者必须使用专门的图表绘制程序来生成构建它的代码,这将是非常痛苦的。 因此,我们使用一个非常方便的文本字符串来表示该图,我们倾向于将其称为“正则表达式”,即使它只是正则表达式图的“文本表示”。正则表达式构造采用该字符串并构建实际的 DFA(或 NFA)图。此后,我们使用该图来匹配我们想要的任何字符串。
* 所以,是的,如果我们编写代码将构造的图分解回字符串,我们
可以从图中获取文本正则表达式字符串,但没有人需要这样做!我们为什么要这么做?