C ++ Regex Speed Optimize

时间:2016-03-21 15:26:00

标签: c++ regex pcre

你好这是我的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); 和......之间存在一切?)

1 个答案:

答案 0 :(得分:0)

正如我在上一个问题中所怀疑的那样,这看起来像Regex不是最合理的解决方案。

“正则表达式”来自描述“常规语言”的“正则表达式”。具有匹配括号的语言(如C ++本身)不常见。现在,我们所谓的“正则表达式”已经演变为包含一些非常规语言,但这并不是最优的。

在这种情况下,它看起来像一个完全普通的解析器可以工作。据我了解,目标是在();之间寻找任何内容。因此,对(进行简单的文本搜索,向后搜索);。检查是否找到了两个();之前,然后使用找到的索引对来提取子字符串。