你好这是我的c ++正则表达式
regex MyRGX(R"~((\w*)\s*[(]([^;]*)[)]\s*[;])~");
这是我的字符串
Data1 (
anything1
);
这个正则表达式得到了
Data1
();
之间存在任何条件的Data1
。但是当我有超过50个像();
这样的块时,这个正则表达式搜索速度将低于pcre中的等效正则表达式。我认为我拥有的这个正则表达式并不是为了速度而优化。你是否有任何建议在这个条件下提高这个正则表达式的速度(select geography::STPolyFromText('POLYGON((-95.388 42.909, -95.388 43.255, -94.913 43.255, -94.913 42.909, -95.388 42.909))', 4326);
和......之间存在一切?)
答案 0 :(得分:0)
正如我在上一个问题中所怀疑的那样,这看起来像Regex不是最合理的解决方案。
“正则表达式”来自描述“常规语言”的“正则表达式”。具有匹配括号的语言(如C ++本身)不常见。现在,我们所谓的“正则表达式”已经演变为包含一些非常规语言,但这并不是最优的。
在这种情况下,它看起来像一个完全普通的解析器可以工作。据我了解,目标是在(
和);
之间寻找任何内容。因此,对(
进行简单的文本搜索,向后搜索);
。检查是否找到了两个(
在);
之前,然后使用找到的索引对来提取子字符串。