Как найти второе-последнее появление символа внутри строки?

Если возможно, используйте только стандартные PHP-функции, такие как substr (), strrpos (), strpos () и т. Д.

Related of "Как найти второе-последнее появление символа внутри строки?"

Сначала найдите последнюю позицию:

$last = strrpos($haystack, $needle); if ($last === false) { return false; } 

Оттуда найдите второе:

 $next_to_last = strrpos($haystack, $needle, $last - strlen($haystack) - 1); 

Общее решение для любого числа шагов назад:

 function strrpos_count($haystack, $needle, $count) { if($count <= 0) return false; $len = strlen($haystack); $pos = $len; for($i = 0; $i < $count && $pos; $i++) $pos = strrpos($haystack, $needle, $pos - $len - 1); return $pos; } 

С strpos :

 $pos = -1; $last = null; $secondLast = null; while (($pos = strpos($haystack, $needle, $pos+1)) !== false) { $secondLast = $last; $last = $pos; } if (!is_null($secondLast)) { echo 'second last occured on '.$secondLast; } 

Найти regexp (plz исправить меня, если я ошибаюсь, и как написать его в PHP):

  r'x[^x]*x[^x]*$'.replace('x',your_char) 

Я не думаю, что это можно сделать с помощью strrpos, потому что начало позиции не работает так, как вы ожидали.

Существует afaik не какой-либо очевидный способ, но эта функция должна это делать. (Не проверено, но я думаю, что это работает).

  /** Return the position of the second last needle in haystack or false if nothing is found. I really hate functions with return types that depend on their input, but this function is made to look like the similary php functions (strpos, strrpos and so on) */ // Needle must be a char. If you want it to be a string instead, just substr // length of needle instead of 1 in this example. function findSecondLastChar($needle,$haystack) { $found=0; for($pos=strlen($haystack)-1;$pos>=0;$pos--) { if(substr($haystack,$pos,1)==$needle) { if($found++ == 1) return $pos; } } // If we reach this, nothing were found return false; }