Если это возможно, используя только стандартные PHP функции, как подстрока(), strrpos(), StrPos() и т.д.Как найти второе-последнее появление символа внутри строки?
ответ
Во-первых, найти последнюю позицию:
$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;
}
Поиск регулярного выражения (плз, поправьте меня, если я ошибаюсь, и как писать в PHP):
r'x[^x]*x[^x]*$'.replace('x',your_char)
Снова прочитайте вопрос; Я не думаю, что OP разрешено использовать регулярные выражения. –
Это именно то, что я был после, однако, так tyvm! Я не буду повышать, так как он точно не отвечает на вопрос OP, но я рад, что вы отправили свой ответ. :) – jbaums
Я не думаю, что это может быть сделано с strrpos, потому что начало позиции не работает так, как вы ожидали.
Существует нет никакого очевидного способа, но эта функция должна это делать. (Не проверено, но я думаю, что это работает).
/** 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;
}
Мартин, я согласен strrpos очень неинтуитивно, но я, наконец, получил его на работу. См. Мой обновленный ответ. –
- 1. Найти последнее появление символа в String?
- 2. javascript: найти второе последнее появление строки внутри строки?
- 3. Как найти однократное появление нелатинского символа с использованием регулярных выражений?
- 4. Получить первое появление символа из строки
- 5. tsql последнее «появление» внутри строки
- 6. Как извлечь второе появление символа?
- 7. Как найти появление строки среди строковых литералов?
- 8. Заменить Последнее появление символа
- 9. появление строки
- 10. Как найти появление символа в String с помощью java?
- 11. Python: как найти появление одиночного символа, используя цикл while?
- 12. Первое появление символа в строке
- 13. Как подсчитать появление определенного символа в строке
- 14. Как найти индекс символа внутри строки в C?
- 15. Найти появление образца WAV внутри другого WAV?
- 16. Javascript: Как удалить появление символа из значения?
- 17. Как проверить каждый из символа внутри строки
- 18. Каждое появление символа в строке
- 19. php preg_split последнее появление символа
- 20. Найдите самое правое появление символа в C?
- 21. Считайте появление символа в списке
- 22. найти первое появление символа, которое находится в середине URL-адреса
- 23. Как найти первое появление символа (не начиная с начала строки) в cpp?
- 24. Найти каждую позицию данного символа внутри массива
- 25. Как считать появление символа в строке
- 26. Как проверить общее появление символа в строке
- 27. Как подсчитать появление каждого символа в списке?
- 28. Как найти первое и последнее вхождения определенного символа внутри строки в PostgreSQL
- 29. Найти последнего символа строки php
- 30. Мне нужно проверить появление определенного символа в начале моей строки
Следует отметить, что это не будет работать должным образом в PHP 4. –
Ба, не проверить это полностью. Это должно сделать это. –