2016-03-24 19 views
1

Bu normal bir ifade var. GCC 5.3 bu ifade den <regex> ile beklenen ama <boost/regex.hpp> (şu anda son sürümü) yer alır eğerboost :: regexp'in beklenmedik davranış

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

ama

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

Yok kimse herhangi bir fikir eşleşir işleri olarak?

ADD:

Ben http://www.regextester.com/ bu Regexp'i test - çok beklendiği gibi davrandı.

ADD:

İçlerinde herhangi bir değişiklik olmadan Boost regexp'in kaynakları kullanarak paylaşılan kütüphane kurdu; Ben makefile bu hatları ile yapmış:?

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

ve

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

Belki boost :: regex Unicode seçeneklerini ayarlamak gerekir ..

+0

deneyin '"

diğer bir yöntem, şu şekilde ifade değiştirmektir (:^| \\ R) [\ t] * (- [ \\ s \\ S] *?) (? = \\ R [\ t] * - | $) ". –

+0

@ WiktorStribiżew, bu işe yaramıyor. –

cevap

0

boost Perl en kullanır sözdizimi, bu nedenle $ yalnızca satırın sonu değil, aynı zamanda "yeni bir satırdan hemen önce" de (here açıklanmıştır) eşleşir. Bu yüzden regex_constants::no_mod_m ifadesini regex'in bayraklarına eklemek sorunu çözdü.

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

hatta:

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