2016-03-24 8 views
1

私はこの正規表現を持っています。 GCC 5.3から<regex>では予想通り、この表現は動作しますが、私は<boost/regex.hpp>(この時点で最後のバージョン)が含まれている場合、それはブースト:: regexpに予期しない動作

--prefix=<path>   Set the specified path as the prefix 

なく

--prefix=<path>   Set the specified path as the prefix 
          for paths mentioned below (except ones 
          specified manually). 

と一致する誰に任意のアイデアをお持ちですか?

ADD:

私はhttp://www.regextester.com/でこの正規表現をテストした - あまりにも期待どおりに振る舞いました。

ADD:

私はそれらを変更することなく、ブーストの正規表現のソースを使用して共有ライブラリを構築しました。私はメイクファイルでこの行でこれを行わ:?

g++ -std=c++0x -I../../include -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "[email protected]" "$<" 

g++ -Wl,--no-undefined -shared -o "libregex.so" $(OBJS) $(USER_OBJS) $(LIBS) 

は、たぶん私はブースト::正規表現のUnicodeのオプションを調整する必要があります。..

+0

てみ '":| [\ t]は*( - [(^ \\ R?) \\ s \\ S] *?)(?= \\ R [\ t] * - | $) " –

+0

@WiktorStribiżew、これは動作しません。 –

答えて

0

ブーストはPerlの使用していますしたがって、$は、行末だけでなく、「改行直前」にも一致します(hereを参照)。だからregex_constants::no_mod_mを正規表現のフラグに追加すると、私の問題は解決しました。

別の方法は、次のように表現を変更することです:

(?:\\A|\\n)[ \\t]*(-.*?)(?=\\n[ \\t]*-|\\z) 

かさえ:

^[ \\t]*(-.*?)(?=\\n[ \\t]*-|\\z)