2011-09-28 12 views
13

誰かが2つの違いを説明できますか?今すぐ学ぶ方が良いでしょうか?知識はどのようにして1つから他のものに移り、その逆も同様です。Boost.RegexとC++ 11 Regex

+5

標準的な方法を学ぶことは決して悪いことではありません。 –

+3

GCCによって完全に実装されていないので、標準ライブラリC++ 11 Regexには注意してください:http://stackoverflow.com/questions/4716680/c0x-regex-in-gcc –

答えて

10

boost regexライブラリはC++ 0xにしていますので、徐々にboostから削除されると思います。ただし、C++ 0xをサポートしていないコンパイラでも引き続き使用できるので、boostを使用すると便利です。それは本当にあなた次第です。

+3

はい、ただし、簡単な 's/boost ::/std ::/g'でRegexをC++ 11正規表現に変換する正規表現ベースのプログラム? –

+0

@Rob:これは、あなたがBoost.RegexのICUサポートを利用しているかどうかによって決まると思います。 – ildjarn

7

大きな違いの1つは、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のサポートを削除すると確信しています。