2016-03-09 13 views
7

mam bardzo szczególne pytanie dotyczące wyrażeń regularnych w R:regex: "(^ |)" vs "(| ^)"

grepl("(|^)over","stackoverflow") 
# [1] TRUE 

grepl("(^|)over","stackoverflow") 
# [1] FALSE 

grepl("(^|x|)over","stackoverflow") 
# [1] FALSE 

grepl("(x|^|)over","stackoverflow") 
# [1] FALSE 

grepl("(x||^)over","stackoverflow") 
# [1] TRUE 

Dlaczego nie wszystkie te wyrażenia oceny do TRUE?

+4

nie wiem, dlaczego do domyślnej biblioteki (POSIX 1003.2 rozszerzonych wyrażeń regularnych), ale działa zgodnie z oczekiwaniami pcre 'Grepl ("(^ |) nad", "stackoverflow", Perl = true) ' – rawr

Odpowiedz

6

Wyrażenia regularne POSIX w rzeczywistości powinno być sprawiają, że wszystkie te są prawdziwe. Wygląda na to, że R uses a slightly modified version z niezupełnie odpowiada standardowi. Postępowałem zgodnie z zaleceniami @ rawr i używam perl = TRUE dla bardziej zgodnych wyrażeń regularnych.

Zobacz także: When both halves of an OR regex group match, is it defined which will be chosen?

+4

R używa implementacji TRE z POSIX ERE domyślnie i PERL-type przez opcję .: https://github.com/laurikari/tre –

+0

Nice! Zaktualizowałem odpowiedź. –

Powiązane problemy