Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何实现Regex_C++_Regex - Fatal编程技术网

C++ 如何实现Regex

C++ 如何实现Regex,c++,regex,C++,Regex,我正在开发一个数据库服务器软件产品(请参阅我的个人资料),我们认为有必要在我们的软件中实现自由文本搜索。我们使用的查询语言标准仅支持使用BT类型正则表达式的自由文本搜索。我们可以将自由文本数据库索引与正则表达式一起使用的唯一方法似乎是实现我们自己的索引。我的问题是: 我在哪里可以找到关于如何实现BT风格正则表达式的论文/示例/模式 是否值得考虑使用一个开源C/C++正则表达式库并修改代码以满足我们的需要 如果我没说错的话,SPARQL使用基于PERL正则表达式的XPath/XQuery正则表达

我正在开发一个数据库服务器软件产品(请参阅我的个人资料),我们认为有必要在我们的软件中实现自由文本搜索。我们使用的查询语言标准仅支持使用BT类型正则表达式的自由文本搜索。我们可以将自由文本数据库索引与正则表达式一起使用的唯一方法似乎是实现我们自己的索引。我的问题是:

  • 我在哪里可以找到关于如何实现BT风格正则表达式的论文/示例/模式

  • 是否值得考虑使用一个开源C/C++正则表达式库并修改代码以满足我们的需要


如果我没说错的话,SPARQL使用基于PERL正则表达式的XPath/XQuery正则表达式语法(至少W3C文档是这么说的)

如果确实是这样,那么您可以从中使用PCRE

它被授权为BSD,因此您可以在商业产品中使用它


如果您的语法稍有修改,您可能可以编写一个小例程,将其规范化为PCRE使用的PERL语法;一个来自贝尔实验室,一个来自UCLA/IBM。我仍然不确定是使用现有的正则表达式库并对其进行修改,还是从头开始编写一个正则表达式库。

这是一项艰巨的任务。我认为不从现有的图书馆开始是疯狂的。希望有一个非常符合你的标准。如果是这样的话,这似乎是一项相对简单的任务。@SingerOfTheFall:我假设BT代表backtracking@SingerOfTheFall有两种正则表达式算法类型,BT是类似Perl的语法和FSA。请看,问题不是找到正则表达式库,我们已经使用了正则表达式库。问题是找到一个可以与数据库索引结合在一起的正则表达式(或如何实现),这很有用,因为这样我们就可以使用自己的自由文本索引,这比在查询中的每个结果上使用正则表达式过滤要快得多。我不是一个数据库后端专家,但是当您使用PCRE时,您可以预编译正则表达式,然后您可以对根据其他查询条件获取的记录集中的文本字段使用它。我看不出问题所在,也许你可以澄清一下你的问题?但是如果你打算自己实现,你仍然可以把PCRE作为参考——它不是一个大的库。你建议的是通常所说的串行扫描,我是wanti,它是一种称为索引+搜索的两阶段设计模式。我只能猜测全文索引的结构-大多数全文索引只是索引字符串中的单词和位置。也许您可以将这两者结合起来,对正则表达式进行一个小的分析,这样您就可以构建一个派生表达式,您可以根据单个索引项进行检查,并且只有通过初步检查的索引项才会被完整扫描。但可能只有一小部分可能的正则表达式可以适合这个方案。然而,我不确定实现你自己的将在这方面对你有什么好处-但我不知道你的引擎。是的,我也这么怀疑。我在REGEX索引网上找到了两篇关于这个主题的论文;一个来自贝尔实验室,一个来自UCLA/IBM。