note 125090 added to regexp.reference.meta
| From: | fiwswe@php.net | Date: | Sat, 06 Jun 2020 11:15:21 +0000 |
| Subject: | note 125090 added to regexp.reference.meta | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-214733@lists.php.net to get a copy of this message | ||
". match any character except newline (by default)"
Here "newline" seems to include both \n (LF) and \r (CR) in PHP 7.4.6. PHP 7.3.18 seems to
be more tolerant and only include \n (LF).
Example:
<?php
$s = "HTTP/1.1 200 OK\r\n";
if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*\n/', $s, $m))
echo "Not matched correctly!\n";
else
echo "OK\n";
?>
The ".*" is supposed to match 0-n characters including \r (CR). It does so in PHP 7.3.18
but not in PHP 7.4.6.
Result (PHP 7.3.18):
OK
Result (PHP 7.4.6):
Not matched correctly!
A pattern that works in both versions of PHP looks like this:
'/^HTTP\/(\d\.\d)\s*(\d+).*\r?\n/'
----
Server IP: 45.112.84.4
Probable Submitter: 103.51.166.36 (proxied: 80.133.224.177)
----
Manual Page -- http://php.net/manual/en/regexp.reference.meta.php
Edit -- https://master.php.net/note/edit/125090
Del: integrated -- https://master.php.net/note/delete/125090/integrated
Del: useless -- https://master.php.net/note/delete/125090/useless
Del: bad code -- https://master.php.net/note/delete/125090/bad+code
Del: spam -- https://master.php.net/note/delete/125090/spam
Del: non-english -- https://master.php.net/note/delete/125090/non-english
Del: in docs -- https://master.php.net/note/delete/125090/in+docs
Del: other reasons-- https://master.php.net/note/delete/125090
Reject -- https://master.php.net/note/reject/125090
Search -- https://master.php.net/manage/user-notes.php