Sono abbastanza sicuro che ho visto “\R
è stato introdotto nel Ruby2 in modo che corrisponda a capo, nonostante da dove sono venuti: unix \n
, MacOS \r
o Windows \r\n
” da qualche parte . Detto questo, Ruby2 dovrebbe trattare \R
come %r{\r\n|\r|\n}
.Rubino regex 'backslash R' alias ' R' modello
Questo funziona bene:
▶ "a\nb".match /\R/
#⇒ #<MatchData "\n">
▶ "a\rb".match /\R/
#⇒ #<MatchData "\r">
▶ "a\r\nb".match /\R/
#⇒ #<MatchData "\r\n">
anche se la fine della riga/feed sono combinati:
▶ "a\r\n\nb".match /\R{2}/
#⇒ #<MatchData "\r\n\n">
a meno che non si cerca di negare \R
:
▶ "a\nb".match /[^\R]+/
#⇒ #<MatchData "a\nb">
Negare \n
funziona bene anche se :
▶ "a\nb".match /[^\n]+/
#⇒ #<MatchData "a">
Sfortunatamente, \R
è estremamente difficile da google. Né lo Regexp
rdoc né lo Regular Expressions ne parlano.
Un qualsiasi guru di espressioni regolari potrebbe ignorare una spiegazione qui, in modo che fosse almeno facilmente consultabile?
Grazie in anticipo.
Dopo aver letto la spiegazione di @ sawa, che sembra perfettamente ragionevole, mi chiedo se questo potrebbe essere un bug. Mi sembra che '" a \ nb ".match/[^ \ R] + /' dovrebbe funzionare nel modo previsto. Ho lasciato una mail a [K. Takata] (https://github.com/k-takata) che chiede di dare un'occhiata alla tua domanda. –
@CarySwoveland Grazie per quello. D'altra parte, non penso che la disgiunzione delle espressioni atomiche possa essere [facilmente] negata. Semplicemente non dovremmo aspettarci il comportamento corretto tra parentesi quadre da non letterali, esattamente come non ci aspettiamo riferimenti arretrati (avendo apparentemente la stessa notazione) per agire correttamente all'interno del raggruppamento dei caratteri. – mudasobwa