|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2021-10-18 08:32 UTC] 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. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 15:00:01 2025 UTC |
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.I have similar issue with this (simplified) regexp. I tested this with PHP docker images. It works in 7.4-cli and 8.0-cli, but not in 8.1-cli (PCRE 10.39) or 8.2-cli (PCRE 10.40). Also works if negation is replaced with whitespace. Test script: ------------ echo preg_match('/(<\w+[^>]+href>)/', '<li><a href>'); Excepted result: ---------------- 1 Actual result: -------------- 0