2009-08-26 10 views
42

Mój program może przyjmować dane, które zawiera znaki nowej linii \ n \ r \ n lub \ r (np Unix, PC lub style Mac)Wyrażenie regularne pasujące wieloplatformowym znaki nowej linii

Jaki jest najlepszy sposób, aby skonstruować wyrażenie regularne, które będzie pasować niezależnie od kodowania?

Alternatywnie, mogę użyć uniwersalnego wsparcia na wejściu, ale teraz jestem zainteresowany, aby zobaczyć, co będzie regex.

+8

Po prostu zwróć uwagę, '\ r' to styl _old_ Mac (i przez" stary "mam na myśli" OS 9 i wcześniej "). Każdy Mac z systemem OS X (a.k.a. wyprodukowany po 1999) użyje "\ n" jak każdy inny Unix. –

+0

Kiedy warto dopasować nowe linie do '' $ '', aby dopasować koniec linii? – tonfa

+1

@tonfa: Podczas dzielenia pliku na linie za pomocą wyrażeń regularnych. –

Odpowiedz

71

Wyrażenie, którego używam, gdy chcę być precyzyjny, to "\r\n?|\n".

Kiedy nie martwię się konsystencją lub pustymi liniami, używam "[\r\n]+", wyobrażam sobie, że moje programy są gdzieś o 0,2% szybsze.

+3

Zwykle, gdy nie martwię się o nowe linie, nie martwię się również spacjami. –

+0

Co sprawia, że ​​twoje programy są szybsze? – sehe

1

Wzór można uprościć do \r?\n, aby uzyskać niewielki wzrost wydajności, ponieważ prawdopodobnie nie musisz radzić sobie ze starym stylem Mac (OS 9 nie jest obsługiwany od lutego 2002).

Powiązane problemy