Регулярное выражение для соответствия кроссплатформенным символам новой строки

Моя программа может принимать данные, содержащие символы новой строки \n, \r\n или \r (например, стили Unix, PC или Mac)

Каков наилучший способ построить регулярное выражение, которое будет соответствовать любой кодировке?

В качестве альтернативы я мог бы использовать поддержку universal_newline для ввода, но теперь мне интересно посмотреть, каким будет регулярное выражение.


person Alan    schedule 26.08.2009    source источник
comment
Просто обратите внимание, что \r — это старый стиль Mac (и под старым я подразумеваю OS 9 и более ранние версии). Любой Mac под управлением OS X (также известный как выпущенный после 1999 года) будет использовать \n, как и любой другой Unix.   -  person Chris Lutz    schedule 26.08.2009
comment
Когда полезно сопоставлять новые строки с использованием '$' для соответствия концу строки?   -  person tonfa    schedule 26.08.2009
comment
@tonfa: при разбиении файла на строки с помощью регулярных выражений.   -  person too much php    schedule 26.08.2009
comment
@слишком много php Но разве str.splitlines() не работает так же хорошо?   -  person tonfa    schedule 26.08.2009
comment
@tonfa: хорошо, так что это не нужно часто, но это полезно знать для других языков, в которых нет удобных функций, таких как splitlines().   -  person too much php    schedule 26.08.2009


Ответы (2)


Если я хочу быть точным, я использую регулярное выражение "\r\n?|\n".

Когда я не беспокоюсь о согласованности или пустых строках, я использую "[\r\n]+", я полагаю, что это делает мои программы примерно на 0,2% быстрее.

person too much php    schedule 26.08.2009
comment
Обычно, когда я не беспокоюсь о новых строках, я также не беспокоюсь о пробелах. - person Brad Gilbert; 30.08.2009
comment
Что делает ваши программы быстрее? - person sehe; 13.09.2017

Шаблон можно упростить до \r?\n для небольшого повышения производительности, поскольку вам, вероятно, не придется иметь дело со старым стилем Mac (OS 9 не поддерживается с февраля 2002 года).

person Diego V    schedule 18.08.2016