mirror of
https://github.com/php/php-src.git
synced 2024-09-23 02:47:26 +00:00
b9f23c2152
To do global matching (/g), for every empty match we have to do a second match with PCRE_NOTEMPTY turned on. That may fail, however, when the \K escape sequence is involved. For this purpose libpcre 8.0 introduced the PCRE_NOTEMPTY_ATSTART flag, which we will use if available, and otherwise fall back to the old (possibly buggy) behavior.
69 lines
1.1 KiB
PHP
69 lines
1.1 KiB
PHP
--TEST--
|
|
Bug #70232 (Incorrect bump-along behavior with \K and empty string match)
|
|
--SKIPIF--
|
|
<?php
|
|
if (version_compare(explode(' ', PCRE_VERSION)[0], '8.0', 'lt')) {
|
|
die("skip this test requires libpcre >= 8.0");
|
|
}
|
|
?>
|
|
--FILE--
|
|
<?php
|
|
$pattern = '~(?: |\G)\d\B\K~';
|
|
$subject = "123 a123 1234567 b123 123";
|
|
preg_match_all($pattern, $subject, $matches);
|
|
var_dump($matches);
|
|
var_dump(preg_replace($pattern, "*", $subject));
|
|
var_dump(preg_split($pattern, $subject));
|
|
?>
|
|
--EXPECT--
|
|
array(1) {
|
|
[0]=>
|
|
array(10) {
|
|
[0]=>
|
|
string(0) ""
|
|
[1]=>
|
|
string(0) ""
|
|
[2]=>
|
|
string(0) ""
|
|
[3]=>
|
|
string(0) ""
|
|
[4]=>
|
|
string(0) ""
|
|
[5]=>
|
|
string(0) ""
|
|
[6]=>
|
|
string(0) ""
|
|
[7]=>
|
|
string(0) ""
|
|
[8]=>
|
|
string(0) ""
|
|
[9]=>
|
|
string(0) ""
|
|
}
|
|
}
|
|
string(35) "1*2*3 a123 1*2*3*4*5*6*7 b123 1*2*3"
|
|
array(11) {
|
|
[0]=>
|
|
string(1) "1"
|
|
[1]=>
|
|
string(1) "2"
|
|
[2]=>
|
|
string(8) "3 a123 1"
|
|
[3]=>
|
|
string(1) "2"
|
|
[4]=>
|
|
string(1) "3"
|
|
[5]=>
|
|
string(1) "4"
|
|
[6]=>
|
|
string(1) "5"
|
|
[7]=>
|
|
string(1) "6"
|
|
[8]=>
|
|
string(8) "7 b123 1"
|
|
[9]=>
|
|
string(1) "2"
|
|
[10]=>
|
|
string(1) "3"
|
|
}
|