Bug #81537 [Com]: Error in regular expression using negation.

From: Date: Wed, 21 Sep 2022 08:24:32 +0000
Subject: Bug #81537 [Com]: Error in regular expression using negation.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242446@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81537&edit=1 ID: 81537 Comment by: antonio at softcodex dot ch Reported by: jansverre at uffe dot no Summary: Error in regular expression using negation. Status: Verified Type: Bug Package: PCRE related Operating System: Ubuntu Linux 20.04 PHP Version: 8.0.11 Block user comment: N Private report: N New Comment: Not sure if it's the same issue. I have this regex (see below) that doesn't work on PHP 7.3.33: 7.3.33-6+ubuntu20.04.1+deb.sury.org+1 but WILL work on the windows binary and "php:7.3-apache" docker image PHP 8.1.10: only tested the windows binary preg_match( '/<(\w+)[\s\w\-]+ id="S44_i89ew">/', '<br><div id="S44_i89ew">' , $matches ); expected result: array(2) { [0]=> string(20) "<div id="S44_i89ew">" [1]=> string(3) "di" } actial result: array(0) { } The strangely if you change the + quantifier after [\s\w\-] to * or ? it works. Previous Comments: ------------------------------------------------------------------------ [2022-01-04 22:08:02] sebastiaodomingos05 at gmail dot com As I can see, it is rather related to an extra space after adding the letter 'a'. ------------------------------------------------------------------------ [2021-12-01 15:11:36] cmb@php.net This is apparently fixed in PCRE2 10.39 (or maybe earlier), bundled as of PHP 8.1.1. I'm not sure whether we should update PHP-8.0 to this PCRE2 version. ------------------------------------------------------------------------ [2021-10-18 08:43:04] cmb@php.net This is a PCRE JIT issue (<https://3v4l.org/0Em35> vs. <https://3v4l.org/I8BQ4>). ------------------------------------------------------------------------ [2021-10-18 08:32:32] jansverre at uffe dot no Description: ------------ Regular expression that *should* match a text does not match it. In the code sample, the second preg_match will match the link in the string, but not the first, and the only difference is that the input string contains an extra 'a' letter. Test script: --------------- $regex = '/(^|[\n\s\>\\";]+)([^ \,"\t\n\r<>;]+\.[^ \,\"\t\n\r<]+)/iu'; $text = 'This is a normal text. http://vg.no, VG'; preg_match_all($regex, $text, $matches); print_r($matches); $text = 'This is normal text. http://vg.no, VG'; preg_match_all($regex, $text, $matches); print_r($matches); Expected result: ---------------- Both $matches should contain the link http://vg.no Actual result: -------------- Only the last $matches contains the link. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=81537&edit=1

« previous php.bugs (#242446) next »