При написании этого ответа мне пришлось сопоставлять исключительно на линиях, вместо того, чтобы использовать 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)?