4 / 4 / 2
Регистрация: 15.09.2013
Сообщений: 46
1

Найти в строке и инкрементировать последнее число

17.12.2015, 11:42. Показов 833. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветвую!
продолжаю изучение php

появилась задача в строке найти последее число и прибавить 1.

т.е. есть строка: $str = "asdf@jh238498f-ewr-99!$./*"

нужно в ней найти 99, прибавить 1 и получить на выходе asdf@jh238498f-ewr-100!$./*

функцию написал, даже работает. но смущает, что уж больно как-то сложно. В общем нужна конструктивная критика:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function newNumber($old){
    $start=-1;
    $stop=-1;
    $last='';
    $num='';
    $first='';
    for($a=strlen($old)-1;$a>-1;$a--){
        if(is_numeric($old[$a])&& $start==-1){
            $start=$a;
        }
        elseif(!is_numeric($old[$a])&& $start>-1 && $stop==-1){
            $stop=$a;
        }
    }
    for($a=0;$a<$stop+1;$a++){
        $first .= $old[$a];
    }
    for($a=$stop+1;$a<$start+1;$a++){
        $num .= $old[$a];
    }
    for($a=$start+1;$a<strlen($old);$a++){
        $last .= $old[$a];
    }
    if($num){
        $new=$first.($num+1).$last;
     }else{
        $new=$last.'1';
     }
    return $new;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2015, 11:42
Ответы с готовыми решениями:

Найти последнее слово в строке
Помогите пожалуйста. Нужно найти последнее слово в строке.

Найти последнее слово в строке символов.
Нужно найти последнее слово в строке символов. программа находит последнее слово только если в...

Найти последнее наибольшее по длине слово в строке
Помогите пожалуйста написать программу. Задана символьная строка, написать программу, которая...

Найти последнее вхождение некоторой подстроки в строке
пожалуйста помогите. дан текст из нескольких строк. предлагается: 1) найти последнее вхождение...

7
Эксперт .NET
10538 / 6466 / 1502
Регистрация: 25.05.2015
Сообщений: 19,597
Записей в блоге: 14
17.12.2015, 12:30 2
Пппробуйте почитать про регулярные выражения в php.
0
4 / 4 / 2
Регистрация: 15.09.2013
Сообщений: 46
17.12.2015, 12:34  [ТС] 3
да.... это темный лес для меня
но мысль я понял, спасибо!
0
Эксперт .NET
10538 / 6466 / 1502
Регистрация: 25.05.2015
Сообщений: 19,597
Записей в блоге: 14
17.12.2015, 12:36 4
Там, предполагаю, можно выделить несколько числовых подстрок и заменить последнюю из них.
0
Фрилансер
Эксперт JSЭксперт HTML/CSSЭксперт PHP
1846 / 1342 / 599
Регистрация: 12.01.2011
Сообщений: 5,432
17.12.2015, 12:53 5
PHP
1
2
3
4
$str = "asdf@jh238498f-ewr-99!$./*";
preg_match("~[a-z]+@[a-z0-9]+\-\w+\-([\d]+)~",$str,$vi);
$m = $vi[1]+1;
echo $m;
100
0
1099 / 661 / 397
Регистрация: 07.11.2015
Сообщений: 1,062
17.12.2015, 13:11 6
Регуляркой можно еще так
PHP
1
2
3
4
5
6
7
8
9
$str = 'asdf@jh238498f-ewr-99!$./';
 
$str = preg_replace_callback(
       '/(?:\D*\K\d+)+/' 
       , function ($m) { return ++$m[0]; }
       , $str
       );
 
echo $str;
0
4 / 4 / 2
Регистрация: 15.09.2013
Сообщений: 46
17.12.2015, 21:25  [ТС] 7
Azdeman,
Так ведь тут задача получить полностью строчку: asdf@jh238498f-ewr-100!$./* а не просто 100

Добавлено через 2 минуты
Цитата Сообщение от Emilien Посмотреть сообщение
$str = 'asdf@jh238498f-ewr-99!$./';
$str = preg_replace_callback(
'/(?:\D*\K\d+)+/'
, function ($m) { return ++$m[0]; }
, $str
);
echo $str;
а вот так работает!
Буду теперь разбираться почему
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
17.12.2015, 23:24 8
Как вариант, можно еще воспользоваться регуляркой с заглядыванием
PHP
1
2
3
4
5
$str = 'asdf@jh238498f-ewr-99!$./';
$str = preg_replace_callback('~\\d+(?=\\D+\\z)~', function($m) {
    return ++$m[0];
}, $str, 1);
echo $str;
0
17.12.2015, 23:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2015, 23:24
Помогаю со студенческими работами здесь

Найти последнее слово в k-й строке массива строк.
Ввести текст в виде массива строк,найти последнее слово в k-й строке.

В заданной строке найти последнее слово и его номер
Здравствуйте!! Помогите с решением данной задачи: В данной строке найти последнее слово и ее...

Найти в строке последнее вхождение обратной косой черты
В строке нужно найти последнее вхождение обратной косой черты. Как правильно написать выражение? ...

В заданной строке найти первое и последнее слова и поменять их местами.
Помогите, пожалуйста, с прогой! В заданной строке найти первое и последнее слова и поменять их...

Найти в данной строке последнее слово, начинающееся с латинской буквы ‘a’
Дана строка символов. Найти в данной строке последнее слово, начинающееся с латинской буквы ‘a’.

Найти последнее N -значное простое число
Всем привет. Нужна помощь в решении задачи, реально нужна =\ Буду крайне признателен. Найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru