Функция, которую я использую, должна обнаруживать первый экземпляр символа, а если символ повторяется, восстановите повторяющуюся подстроку. Например:Лучший способ восстановления первого экземпляра возможно повторяющегося символа в строке без использования функций preg_ *
$x = 'fhdfhbc::::dcdcdcuttr482rdvcjv:ducvdk:::chjvdbj'; // ---> function should extract ::::
Я не хочу использовать какие-либо из preg_*
функций, как избежать их, когда это возможно (потому что эти функции медленно). Мое решение в настоящее время это:
$char = ":"; // this would be set as necessary
$char_substring = str_repeat($char, strspn(strstr($x, $char), $char)); // yields ---> ::::
Примечания Вы не можете использовать strrpos
здесь, потому что может быть (в данном случае) колоны на другом конце строки. Вы можете использовать explode
, а затем запустить for
или foreach
петлю, конкатенации на стеклотару, или некоторые вариации этого:
$explode = explode($char, $x);
$substring = $char; // explode array should have 1 less empty member than the repeated character, so need to start with char count of 1
$emptyEncountered = false;
for($i = 0, $count = count($explode); $i < $count; $i++) {
if ($explode[$i]) {
if ($emptyEncountered) break;
} else {
$emptyEncountered = true;
$substring .= $char;
}
}
echo $substring; // ---> ::::
Есть ли лучший способ, чем использование preg_ *, а для/каждого цикла, или str_repeat (strspn (strstr()))?