你好,这是我的 C++ 正则表达式
regex MyRGX(R"~((w*)s*[(]([^;]*)[)]s*[;])~");
这是我的字符串
Data1 (
anything1
);
这个正则表达式得到 Data1
,一切都存在于任何条件下();
之间。但是当我有超过 50 个像 Data1
这样的块时,这个正则表达式搜索速度将低于 PCRE 中的等效正则表达式。我认为我拥有的这个正则表达式没有针对速度进行优化。您是否有任何建议在此条件下提高此正则表达式的速度(让一切都存在于 ();
和 ...
正如我从你之前的问题中怀疑的那样,这看起来像是正则表达式不是最合乎逻辑的解决方案的情况。
"正则表达式"来自描述"常规语言"的"正则表达式"。带有匹配括号的语言(如C++本身)是不规则的。现在,我们所说的"正则表达式"已经发展到包括一些非常规语言,但这不是最佳的。
在这种情况下,看起来一个完全普通的解析器可以工作。据我了解,目标是寻找(
和);
之间的任何东西。所以做一个简单的文本搜索向前搜索(
,向后搜索);
。检查是否找到两者,并且(
在);
之前,然后使用找到的索引对来提取子字符串。