2016-03-09 11 views
7

Ho una domanda molto particolare per quanto riguarda le espressioni regolari in 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 

Perché non tutte quelle espressioni restituiscono TRUE?

+4

non sicuro circa il motivo per cui per la libreria di default (POSIX 1003.2 esteso le espressioni regolari), ma funziona come previsto con pcre 'Grepl ("(^ |) over", "StackOverflow", perl = TRUE) ' – rawr

risposta

6

POSIX le espressioni regolari in realtà devono rendere tutti quelli Veri. Sembra che R uses a slightly modified version di Ville Laurikari's TRE library non segua lo standard. Seguirò i consigli di @ rawr e useremo perl = TRUE per espressioni regolari più conformi.

Consulta anche: When both halves of an OR regex group match, is it defined which will be chosen?

+4

R utilizza l'implementazione TRE di POSIX ERE per impostazione predefinita e tipo PERL per opzione .: https://github.com/laurikari/tre –

+0

Nice! Ho aggiornato la risposta. –