Skip to content

Commit f3d20ac

Browse files
Merge pull request SimpleMachines#9095 from Sesquipedalian/3.0/buildregex_trailing_chars
Fixes the trailing characters optimization in Utils::buildRegex()
2 parents 1f2683c + eaec605 commit f3d20ac

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

Sources/Utils.php

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,19 +1051,27 @@ public static function buildRegex(array $strings, ?string $delim = null, bool $r
10511051

10521052
// Can we trim common characters from the end?
10531053
$trailing = '';
1054-
$i = -1;
10551054

1056-
while ($strings[0] !== '' && \strlen($strings[0]) < $i * -1) {
1057-
$last_char = mb_substr($strings[0], $i, null, $encoding);
1055+
if (\count($strings) > 1) {
1056+
$len = mb_strlen($strings[0], $encoding);
1057+
$i = 1;
10581058

1059-
foreach ($strings as $string) {
1060-
if (!str_ends_with($string, $last_char)) {
1061-
break 2;
1059+
while ($i < $len) {
1060+
$last_chars = mb_substr($strings[0], -$i, null, $encoding);
1061+
1062+
foreach ($strings as $string) {
1063+
if (!str_ends_with($string, $last_chars)) {
1064+
break 2;
1065+
}
10621066
}
1067+
1068+
$i++;
1069+
$trailing = $last_chars;
10631070
}
10641071

1065-
$i--;
1066-
$trailing = $last_char;
1072+
if (($trailing_len = mb_strlen($trailing, $encoding)) > 0) {
1073+
$strings = array_map(fn($string) => mb_substr($string, 0, -$trailing_len, $encoding), $strings);
1074+
}
10671075
}
10681076

10691077
// Create the trie from the strings.

0 commit comments

Comments
 (0)