2012-02-02 16 views
6

Io uso il seguente espressione regolare per rendere a capo
tags:Regex mettere a nudo r n o r n

str.gsub("\r\n", '<br>') 

Questo funziona bene su un desktop. su un testo iphone ha \ n, non ha il \ r.

Come posso rendere il supporto regex sia? \ r \ n o solo \ n?

Grazie

+1

Non conosco Ruby, ma la cosa standard è str.gsub ("\ r? \ N", '
'). Provalo. – Cheery

+0

Grazie, l'ho provato ma non ha funzionato. str = str.gsub ("\ r? \ n", '
') niente aveva un tag br – AnApprentice

risposta

8

\r\n|\r|\n

Quella espressione regolare vi permetterà anche di supporto Mac, che utilizzano \r da solo come una fine linea. Dal momento che le regex sono avide, esse corrisponderanno allo \r\n rispetto a quelle individuali se possibile.

+0

Che non ha funzionato? str = str.gsub ("\ r \ n | \ r | \ n", '
') – AnApprentice

+0

Ho avuto modo di lavorare con .. ma ora ha 2 BR .. Ne voglio solo uno? str = str.gsub (/ \ r \ n | \ r | \ n /, '
') – AnApprentice

+0

Hmm, è strano. Beh, forse sarà più affidabile se prima chiami la sostituzione con '\ r \ n', poi chiama di nuovo con' \ r | \ n', solo per evitare confusione regex'. –

1

l'operatore ? accetta 0 o uno dei dell'elemento precedente in modo \r?\n dovrebbe accettare \r or \n or \r\n

+0

Che non funzionasse. nessuno dei due sta coincidendo ora? str = str.gsub ("\ r? \ n", '
') – AnApprentice

+0

Il? ha bisogno di andare dopo il \ n. In questo caso dovrebbe andare oltre il termine in cui si qualifica/limita. Così com'è, sta qualificando il '\ r'. Questo funziona per me: 'str = str.gsub (/ \ r (\ n)? /, '
')' – aenw

12

Penso

str.gsub(/\r?\n/, '<br>') 

dovrebbe fare il lavoro

+0

Grazie, ma non ha funzionato: str = str.gsub ("/ \ r? \ N /", '
') – AnApprentice

+1

@AnApprentice lo hai scritto con parentesi e regexp dovrebbe essere senza di loro - ho appena controllato la sintassi di Ruby – Cheery

+1

Non utilizzare la virgola doppia (") per il primo parametro – barley

0

\r?\n|\r

\r?\n abbinerà \n o \r\n.

\r corrisponderà solo a \r.

Questo dovrebbe funzionare per EOL Windows \ Mac \ Linux.

1

Questo è probabilmente il modo più semplice:

str.gsub(/\R/, '<br>') 

/\R/ lavori per Mac/Linux/Windows e include nuove righe unicode più esotiche.

+1

Grazie! Anche più facile da ricordare e più robusto. –

Problemi correlati