Как оставить только цифры, без букв?

169
16 января 2022, 04:10

Есть строка:

test-test-example-demo-1a-3321-0-3555-0

Мне нужно удалить все кроме цифр, но чтобы 1a тоже удалилось, так как по с этой цифрой стоит символ отличный от -

Я делал так:

preg_replace('/[^\d-]/', '', $str);

Но в итоге я получаю:

1-3321-0-3555-0

А нужно получить:

3321-0-3555-0

Кол-во слов в строке всегда разное.

Буду благодарен за помощь.

Answer 1

В одну строку регуляркой (если нужно именно регуляркой):

$text = 'test-test-example-demo-1a-3321-0-3555-0';
echo preg_replace('~^.*?((?:\d+-)+\d+).*?$~', '$1', $text);
Answer 2

Вот такое решение у меня получилось без регулярки:

$string = 'test-test-example-demo-1a-3321-0-3555-0';

$array = explode('-', $string);
foreach($array as $key => $value){
    if(!is_numeric($value)){
        unset($array[$key]);
    }
}
print_r(implode('-', $array));

Результат: 3321-0-3555-0

Answer 3
$str  = 'test-test-example-demo-1a-3321-0-3555-0-';
$str  = preg_replace('/[0-9]+[a-zA-Z]/', '', $str); //удаляем все цифры после которых есть буквы
$str  = preg_replace('/[a-zA-Z][0-9]*/', '', $str); //удаляем все буквы и цифры после них, если они имеются
$str  = preg_replace('/-(?=-)/', '', $str);//удаляем все оставшиеся парные '-'
$str  = preg_replace('/^-/', '', $str );//удаляем '-' в начале строки
$str  = preg_replace('/-$/', '', $str );//удаляем '-' в конце строки
echo $str; //можно конечно все регулярные выражения собрать в одну строку, но мне проще так
READ ALSO
Как ускорить конвертацию svg в png через Inkscape

Как ускорить конвертацию svg в png через Inkscape

Сейчас конвертирую так: inkscape -z -e testpng -w 100 -h 100 test

147
Как вывести дату

Как вывести дату

Я из базы данных получаю дату публикации поста 2019-12-18 12:11:57 в таком видеЯ бы хотел выводить на сайте дату таким образом: 18 декабря, 2019

381
make: *** [Makefile:204: shared/core_stream.lo] Error 1

make: *** [Makefile:204: shared/core_stream.lo] Error 1

Имеется Debian 10, Php 74

123