3v4l.org

run code in 300+ PHP versions simultaneously
<?php $subjects = [ 'LF' => "aaaa\nbbbb", 'CRLF' => "aaaa\r\nbbbb", 'CR' => "aaaa\rbbbb", 'NUL' => "aaaa\x00bbbb", 'VT' => "aaaa\x0Bbbbb", 'FF' => "aaaa\x0Cbbbb", 'NEL' => "aaaa\x85bbbb", 'LS' => "aaaa\u{2028}bbbb", 'PS' => "aaaa\u{2029}bbbb" ]; $patterns = [ 'DEFAULT' => ['~.~A', '~\N~A'], 'ANYCRLF' => ['~(*ANYCRLF).~A', '~(*ANYCRLF)\N~A'], 'CRLF' => ['~(*CRLF).~A', '~(*CRLF)\N~A'], 'CR' => ['~(*CR).~A', '~(*CR)\N~A'], 'LF' => ['~(*LF).~A', '~(*LF)\N~A'], 'ANY' => ['~(*ANY).~A', '~(*ANY)\N~A'], 'NUL' => ['~(*NUL).~A', '~(*NUL)\N~A'], ]; $format = ' | %7s | %10s | %3s | %3s | ' . PHP_EOL; $sep = '-+---------+------------+-----+-----+-' . PHP_EOL; echo ' | nl type | nl setting | dot | \N | ', PHP_EOL; foreach($subjects as $nl => $subject) { echo $sep; foreach($patterns as $nlsetting => $pattern) { if (false === $cntdot = preg_match_all($pattern[0].'u', $subject)) $cntdot = preg_match_all($pattern[0], $subject); if (false === $cntN = preg_match_all($pattern[1].'u', $subject)) $cntN = preg_match_all($pattern[1], $subject); printf($format, $nl, $nlsetting, $cntdot, $cntN); } } echo $sep;

preferences:
24.79 ms | 405 KiB | 5 Q