如何保存/序列化已编译的正则表达式(std::regex)到一个文件中?
我正在使用Visal Studio 2010的. 我知道,当我创建正则对象时,它就会进行编译.在其他语言和库中没有类似于其他语言和图书馆的编译方法,但我认为这是它的工作方式,我对吗? 我需要在文件中存储大量编译的Regexes 我不知道该怎么做.我发现在PCRE中,它是 2 更多高级方法(Windows版本中没有C ++包装器). 因此,可以使用保存std:regex或boost::regex(是相同的吗?)作为一块内存,然后稍后再重复使用? 或其他允许这样做的简单库? 编辑: 感谢您的出色答案.我将简单地检查仅将正则格(Regex)存储为字符串是否足够,然后如果仍然很慢,我将测试并将其与此旧的PCRE库进行比较. 解决方案 我认为可以在不修改Boost库以支持它的情况下完成. 我不知道如何实现Boost Regex库,但是大多数Regex库都将事物编译为二进制BLOB,然后将其解释为稍后解释为一种有限的虚拟机的指令. 如果以这种方
2 2023-11-20
编程技术问答社区
使用boost regex匹配的c++ Url解析器
如何用升压正则表达式在C ++中解析URL 就像我有一个URL http://www.google.co.in/search?h=test&q=examaple 我需要拆分base url www.google.com,然后查询路径search?h=test&q=examaple 解决方案 您确定您需要以下等级吗? #include #include int main() { using namespace std; string x = "http://www.google.co.in/search/search/?h=test&q=examaple"; size_t sp = x.find_first_of( '/', 7 /* skip http:// part */ ); if ( sp != string::npos ) { string base_url( x.begin
12 2023-11-09
编程技术问答社区
unicode正则表达式 c++
我想通过使用正则表达式匹配"février" 或任何其他月. 正则表达式: ^(Janvier | Fevrier | Mars | Avril | Mai | Mai | Juin | Juillet | Aout | aout | septembre | octobre | novembre | novembre | decembre | decembre | jan | jan | feb | feb | apr | apr | apr | apr | apr | 5月| jun | jun | jun | jun | jul | jul | | nov | dec | [jj] anvier | [ff]évrier| [mm] ars | [aa] vril | [mm] ai | [jj] uin | [jj] | [ss] eptembre | [oo] ctobre | [nn] ovembre | [dd] [eé] cembre)$ 问题 问题
12 2023-11-06
编程技术问答社区
在boost库中的正则表达式的转义序列(K)。
我需要在Boost(版本1.54)中替换\ k,因为它的限制,但它不起作用.我该怎么做或有什么问题?还有其他方法可以用LookAhead转换此表达方式吗? "(? 解决方案 这里有一个较晚的答案... 根据foo.*\\K bar 如果不是这种情况,一个解决方法(显然具有性能含义)是扭转字符串,然后使用可变宽度的look-pread. 然后,您的示例修改正则是: rab (?=.*oof) 其他解决方案 我相信问题是boost lookbehind 模式必须为固定长度. 您的表达式包含一个重复.*,它使其可变长度.
4 2023-08-06
编程技术问答社区
Boost::Regex DOTALL标志
是否有dotall匹配标志bost :: Regex?文档显示: static const match_flag_type match_not_dot_newline; static const match_flag_type match_not_dot_null; ,但没有提及常规的dotall. 我试图匹配写为 的python正则表达式 re.compile(r'', re.DOTALL) 解决方案 我认为您正在寻找的是mod_s stytax_option_type .您也可以使用内联修饰符,(?s).
8 2023-08-06
编程技术问答社区
用C++语言将Boost Regex匹配结果转换为其他格式
可能的重复: 态C ++中的Vice 我应该如何将Boost :: Regex匹配结果转换为其他格式,例如带有以下代码的整数? string s = "abc123"; boost::regex expr("(\\s+)(\\d+)"); boost::smatch match; if(boost::regex_search(s, match, expr)) { string text(match[0]); // code to convert match[1] to integer } 解决方案 我确定您想拥有 string text(match[1]); // convert match[2] to integer 相反,如match[0]是整个匹配的东西(在此处ABC123),因此submatch索引开始于1. 至于转换为整数部分, string s = "abc123"; boost::regex expr("(\\s+)(\\d+)
6 2023-08-06
编程技术问答社区
表达式:使用boost regex时,字符串迭代器不能被解除引用
我想在执行此代码时从页面中恢复所有链接: Microsoft Visual C ++调试库 调试断言失败了! 程序:c:\ users \ gandalf \ desktop \ proxy \ debug \ debug \ proxy.exe文件: C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ include \ Xstring Line: 78 表达式:字符串迭代器不可用 有关您的程序如何导致断言失败的信息, 请参阅"断言"的视觉C ++文档. (按重试进行调试) 中止重试忽略 void Deltacore::Client::get_links() { boost::smatch matches; boost::match_flag_type flags = boost::match_default; boost::regex URL_REGEX("^]*(h
2 2023-08-05
编程技术问答社区
Boost.Regex vs C++11 Regex
有人可以解释两者之间的差异吗?现在学习哪个会更好?知识将如何从一个转移到另一个,反之亦然? 解决方案 Boost Regex库将其制成C ++ 0x,因此我猜想它将从Boost慢慢删除.但是,使用Boost是不错的,因为您仍然可以将其与无C ++ 0x支持的编译器一起使用.所以这确实取决于您. 其他解决方案 一个主要区别是,C ++ 11不提供正则表达式的Perl语法.因此,如果您倾向于使用Perl语法,则必须使用Boost :: Regex Library. 其他解决方案 至少在Visual Studio 2013中,此和相关名称(CMATCH,REGEX_MATCH)在两个命名空间中都是相同的.它们也具有相同(或相似的?)接口. 因此,您只需更改名称空间,而同一代码将与另一个正则汇编无警告和错误一起编译.当然应该有效. P.S.我更喜欢STD :: REGEX,因为它是C ++ 11的一部分,而Boost :: Regex是第三方库.我敢肯定,几年
4 2023-08-05
编程技术问答社区
Boost Regex在Snow leopard上不能正常运行
因此,我继承了使用Boost库中C ++编写的代码.我可以编译(使用代码块)并在Linux Ubuntu上运行代码,但是当我将其移植到Mac并安装了Boost库时,我可以使用代码块对其进行编译(并指定REGEX库的位置),但它赢了't运行. 它只是给我错误: $ ./blah_pd dyld:库未加载:libboost_regex.dylib 从:/users/spinach/desktop/b/blah/bin/release/./blah_pd引用 原因:未找到图像 跟踪/bpt陷阱 我不确定下一步该怎么做,但是任何帮助将不胜感激. 大卫 解决方案 您需要设置DYLD_LIBRARY_PATH环境变量,以包括安装编译的Boost Libs的路径. 其他解决方案 您是否关注这些方向? BOOST.REGEX不是仅限标题库.您需要安装/编译.dynlib.如果您这样做了,您是否记得正确链接它? (-llibboost_regex -lpat
6 2023-08-05
编程技术问答社区
为什么regex_match会抛出 "复杂性异常"?
我正在尝试测试(使用boost::regex)文件中的行是否仅包含空格分开的数字条目.我遇到了一个我不理解的例外(见下文).如果有人可以解释为什么要抛出它,那就太好了.也许我以定义模式的方式在这里做一些愚蠢的事情?这是代码: // regex_test.cpp #include #include #include using namespace std; using namespace boost; int main(){ // My basic pattern to test for a single numeric expression const string numeric_value_pattern = "(?:-|\\+)?[[:d:]]+\\.?[[:d:]]*"; // pattern for the full line const string numeric_seque
8 2023-08-05
编程技术问答社区
链接到gcc中的boost regex
我正在尝试编译我的程序,该程序在Linux上使用Regex.我在 libs/Regex/Build 通过打字 制作-fgcc.mak 创建了一个目录GCC,其中包含以下四个文件 boost_regex-gcc-1_35 boost_regex-gcc-d-1_35 libboost_regex-gcc-1_35.a libboost_regex-gcc-d-1_35.a 现在,我想从某个任意目录中的程序中使用REGEX. 我#包括Boost/Regex.hpp 我发现了一个错误,指出找不到regex.hpp.然后,我在G ++编译器中给出了-i选项.我没有得到这个错误. 但是我得到以下错误 undefined reference to `boost::re_detail::perl_matcher
10 2023-08-04
编程技术问答社区
使用Boost Regex的C++正则表达式
我试图在C ++中取一个字符串,并在其中找到所有的IP地址,并将它们放入新的向量字符串中. 我已经在Regex上阅读了很多文档,但是我似乎无法理解如何执行此简单功能. 我相信我可以使用此Perl表达式找到任何IP地址: re("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"); ,但我仍然对如何做其余的事情感到困惑. 解决方案 也许您正在寻找这样的东西.它使用regex_iterator获得当前模式的所有匹配.请参阅 #include #include #include int main() {
18 2023-08-04
编程技术问答社区
无法链接Boost regex
我目前正在尝试编译 kit的收缩式hierachies实现 Boost :: Regex.提供的makefile已经确保(我还手动对此进行了仔细检查),-lboost_regex开关提供了G ++.如果未安装库,G ++将抱怨. 因此,我从包装源安装了库,然后尝试再次编译.这次,关于boost :: Regex,我遇到了大量的链接错误.这是一个简短的摘录: main.o: In function `boost::re_detail::perl_matcher, std::allocator > >, boost::regex_traits > >::unw
14 2023-03-05
编程技术问答社区
当试图包括'#include <boost/regex.hpp>'时,我得到了。1>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_39.lib'。
不确定为什么要得到的,我从下载了libs 'libboost_regex-vc90-mt-gd-1_39.lib我没有一个称为'libboost_regex-vc100-mt-vc100-mt-vc100-mt-vc100-mt-vc1 gd-1_39.lib',将VC90重命名为vc90 to vc100工作,但我不确定是否确定这是理想的解决方案? #include "stdafx.h" #include #include #include #define BOOST_ALL_NO_LIB int _tmain(int argc, _TCHAR* argv[]) { boost::array a; boost::smatch s; getchar(); return 0; } 解决方案 您可能正在使用Visual Studio 2010(这是V
8 2023-03-05
编程技术问答社区
在进行URL编码时,std::regex_replace对字符 "+"不能正常工作。
以下是代码片段,Regex_replace DOS无法正常工作"+",我不应该使用特殊操作来为角色使用,但它应该正常工作. /*All headerfiles are available.*/ std::string charToHex(unsigned char c, bool bUpperCase); std::string urlEncode(const std::string& toEncode, bool bEncodeForwardSlash); std::string getEncodedUrl(const std::string& url){ std::string bktObjKey = ""; std::string urlEnc = url; boost::regex expression("^(([^:/?#]+):)?(//([^/?#:]*)(:\\d+)?)?([^?#]*)((\\?[^#]*))?(#(.*))?"); std::str
20 2023-03-02
编程技术问答社区
普通符号'p{S}'没有被'匹配'使用boost wregex
我正在使用下面的代码尝试使用REGEX匹配符号(例如,我正在尝试匹配Circle Star符号, http://graphemica.com/%E2%9c%aa ) #include //... std::wstring text = L"a✪c"; auto re = L"(\\p{S}|\\p{L})+?"; boost::wregex r(re); boost::regex_token_iterator i(boost::make_regex_token_iterator(text, r, 1)), j; while (i != j) { std::wstring x = *i; ++i; } //... text的字节值是{97, 10026, 99},(或`{0x61,0x272a,0x63}'). 因此,这是一个有效的符号. 代码匹配2个字母,'a'
180 2023-03-01
编程技术问答社区
忽略使用boost::regex_search的情况
如何使用boost::regex_search在C ++中忽略案例标志或常数? 中 请发布一个简单的例子. 谢谢! 解决方案 您需要这样的东西 boost::regex regex("your expression here", boost::regex::icase); boost::smatch what; string mystring; bool search_result = boost::regex_search(mystring.begin(),mystring.end(), what, regex); 其他解决方案 或类似的东西(不设置boost::regex::icase): boost::regex regex("(?i)expression"); boost::smatch what; string mystring; bool search_result = boost::regex_search(mystring.begi
112 2023-03-01
编程技术问答社区
我如何在一个字符串中找到与boost regex匹配的索引?
如何在与Boost Regex匹配的字符串中找到索引? 解决方案 如果使用boost :: regex_match,则是匹配的整个字符串. 也许您的意思是使用Regex_search: void index(boost::regex& re,const std::string& input){ boost::match_results what; boost::match_flag_type flags = boost::match_default; std::string::const_iterator s = input.begin(); std::string::const_iterator e = input.end(); while (boost::regex_search(s,e,what,re,flags)){ std::cout
18 2023-02-24
编程技术问答社区