При написании этого ответа мне пришлось сопоставлять исключительно на линиях, вместо того, чтобы использовать s
-flag (dotall
- dot match linebreaks).
Сайты, обычно используемые для проверки регулярных выражений, ведут себя по-разному при попытке сопоставления на \n
или \r\n
.
Я заметил
-
Regex101 соответствует линейным ошибкам только на
\n
(пример - удалить\r
, и он соответствует) -
RegExr соответствует строкам строк ни на
\n
, ни на\r\n
и я не могу найти что-то, чтобы он соответствовал линии, за исключениемm
-flag и\s
(пример) -
Debuggex ведет себя еще больше:
в в этом примере он совпадает только с\r\n
, а здесь он соответствует только\n
, с теми же флагами и указанными движками
Я полностью осведомлен о m
-flag (multiline - make ^
соответствует началу и $
концу строки), но иногда это не вариант. То же самое с \s
, так как оно соответствует вкладкам и пробелам.
Моя мысль использовать символ новой строки unicode (\u0085
) не удалась, поэтому:
- Есть ли безопасный способ интегрировать совпадение на линии (предпочтительно независимо от используемого языка) в регулярное выражение?
- Почему вышеупомянутые сайты ведут себя по-другому (особенно Debuggex, совпадающий один раз только на
\n
и один раз только на\r\n
)?