2011-09-28 63 views
13

有人可以解釋兩者之間的區別嗎?現在哪個學習會更好?知識如何從一個轉移到另一個,反之亦然?Boost.Regex vs C++ 11 Regex

+5

學習標準的方法從來就不是一件壞事。 –

+3

小心標準庫C++ 11正則表達式,因爲它仍然沒有完全由GCC實現:http://stackoverflow.com/questions/4716680/c0x-regex-in-gcc –

回答

10

boost正則表達式庫使它成爲C++ 0x,所以我猜它會慢慢從提升中刪除。但是,使用boost是很好的,因爲您仍然可以在沒有C++ 0x支持的編譯器中使用它。所以這真的取決於你。

+3

是的,但可以遷移一個Boost.Regex爲基礎的程序與C + + 11正則表達式與一個簡單的's/boost ::/std ::/g'? –

+0

@Rob:我想這取決於你是否使用Boost.Regex的ICU支持。 – ildjarn

7

一個主要區別是,C++ 11不提供正則表達式的Perl語法。因此,如果您傾向於使用Perl語法,則必須使用Boost :: Regex庫。

+0

是的,正則表達式有Perl語法:有ECMAScript正則表達式,ECMAScript正則表達式與Perl正則表達式相同http://ecma-international.org/ecma-262/5.1/#sec-15.10 – BenjaminB

+5

@Ubiquité你是不正確的。您提供的鏈接表示「以後建模」。 [C++ TR1提案](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1429.htm#syntax_discussion)使用非常類似的「基於」的措辭。 ECMAScript正則表達式與Perl正則表達式不同,Perl提供了更多的功能和一些不同的語法。 –

+1

@PatrickNiedzielski:你是對的,不幸的是Boost.Regex將'perl'定義爲等同於'ECMAScript' http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/ref/ syntax_option_type/syntax_option_type_perl.html。 – kennytm

0

至少在Visual Studio 2013中,這兩個名稱空間和相關名稱(cmatch,regex_match)在兩個名稱空間中都是相同的。他們也有相同的(或類似的?)界面。

所以,你可以改變命名空間,相同的代碼將與另一個正則表達式編譯沒有警告和錯誤。當然它的工作原理應該是一樣的。

P.S.我更喜歡std :: regex,因爲它是C++ 11的一部分,boost :: regex是第三方庫。我相信幾年後,boost將取消對boost :: regex的支持。