diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2016-07-21 15:36:42 +0200 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2016-09-05 00:30:48 -0700 |
commit | 39423e425d6caafea3c0b45c2b6ebe4a06a11462 (patch) | |
tree | 9edf2e0095d589ca61521ae1af2f734c19ebdbb5 /ext/pcre | |
parent | cee363d6093abb25a3b0a0f448f8928c1f819294 (diff) | |
download | php-git-39423e425d6caafea3c0b45c2b6ebe4a06a11462.tar.gz |
Implement #47456: Missing PCRE option 'J'
While it is possible to force the same behavior by setting the internal
option (?J), having a dedicated modifier appears to be useful. After all,
J is even listed on the "Pattern Modifiers" man page[1], but the description
referrs to (?J).
[1] <http://php.net/manual/en/reference.pcre.pattern.modifiers.php>
Diffstat (limited to 'ext/pcre')
-rw-r--r-- | ext/pcre/php_pcre.c | 1 | ||||
-rw-r--r-- | ext/pcre/tests/request47456.phpt | 101 |
2 files changed, 102 insertions, 0 deletions
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index ddc5d764f9..21ea01d92c 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -396,6 +396,7 @@ PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(char *regex, int regex_le coptions |= PCRE_UCP; #endif break; + case 'J': coptions |= PCRE_DUPNAMES; break; /* Custom preg options */ case 'e': poptions |= PREG_REPLACE_EVAL; break; diff --git a/ext/pcre/tests/request47456.phpt b/ext/pcre/tests/request47456.phpt new file mode 100644 index 0000000000..2ba2627c8d --- /dev/null +++ b/ext/pcre/tests/request47456.phpt @@ -0,0 +1,101 @@ +--TEST-- +Request #47456 (Missing PCRE option 'J') +--DESCRIPTION-- +The J modifier is supposed to be identical to the internal option (?J), so we're +testing both. +--FILE-- +<?php +preg_match_all('/(?J)(?<chr>[ac])(?<num>\d)|(?<chr>[b])/', 'a1bc3', $m, PREG_SET_ORDER); +var_dump($m); + +unset($m); +preg_match_all('/(?<chr>[ac])(?<num>\d)|(?<chr>[b])/J', 'a1bc3', $m, PREG_SET_ORDER); +var_dump($m); +?> +--EXPECT-- +array(3) { + [0]=> + array(5) { + [0]=> + string(2) "a1" + ["chr"]=> + string(1) "a" + [1]=> + string(1) "a" + ["num"]=> + string(1) "1" + [2]=> + string(1) "1" + } + [1]=> + array(6) { + [0]=> + string(1) "b" + ["chr"]=> + string(1) "b" + [1]=> + string(0) "" + ["num"]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(1) "b" + } + [2]=> + array(5) { + [0]=> + string(2) "c3" + ["chr"]=> + string(1) "c" + [1]=> + string(1) "c" + ["num"]=> + string(1) "3" + [2]=> + string(1) "3" + } +} +array(3) { + [0]=> + array(5) { + [0]=> + string(2) "a1" + ["chr"]=> + string(1) "a" + [1]=> + string(1) "a" + ["num"]=> + string(1) "1" + [2]=> + string(1) "1" + } + [1]=> + array(6) { + [0]=> + string(1) "b" + ["chr"]=> + string(1) "b" + [1]=> + string(0) "" + ["num"]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(1) "b" + } + [2]=> + array(5) { + [0]=> + string(2) "c3" + ["chr"]=> + string(1) "c" + [1]=> + string(1) "c" + ["num"]=> + string(1) "3" + [2]=> + string(1) "3" + } +} |