Wyszukiwanie podciagu liczb w łańcuchu znaków

0

Witam,

jak w temacie chciałbym wyselekcjonować ciąg liczb. Problem w tym że w ciągu są również inne niż cyfry znaki a litery rzutowane na typ (int) są równe 0 więc nie moge tego zrobić pętlą po łańcuchu i instrukcją warunkową if($tekst[$i] >= 0 && $tekst[$i]<= 9) dlatego że każdą litere odczyta mi za 0.

Przenosząc to na realia chciałbym wyciągnąć kod, 8 elementowy z Tematu maile którym dostaje raport z webservicu(to tylko przykład). Nie mniej jednak na pewno w tym ciągu będą litery. 1) Czy da się to zrobić? 2) Czy trzeba to robić wyrażeniami regularnymi? Nie widziałem żadnych funkcji które pozwalają na pominięcie liter, no chyba że wyrażenia regularne. Czy ktoś kojarzy co powinienem wygooglować po za wyrażeniami regularnymi?

Dzięki wielkie za podpowiedzi!

2
$foo = preg_replace('/[^0-9]/', '', '4gh5hs6hh7');
echo $foo;  //4567
2

Rozbijasz sobie string na poszczególne znaki, a potem korzystasz z https://www.php.net/manual/en/function.is-numeric.php
Albo (jak napisał @MasterOf) korzystasz z regex'ów.

0

OK, dzięki wielkie!

1

$tekst[$i] >= 0 && $tekst[$i] <= 9 wystarczyło zmienić na $tekst[$i] >= '0' && $tekst[$i] <= '9'.

Also,

function digits_masterof(string $string): string
{
    return preg_replace('/[^0-9]/', '', $string);
}

function digits_mozg(string $string): string
{
    return preg_replace('/\D+/', '', $string);
}

hrtime 100 iteracji, min of 5:

> head -c 4096 /dev/urandom | php test.php
14358176 digits_masterof
 1295947 digits_mozg
> tr -c -d [:alnum:] </dev/urandom | head -c 4096 | php test.php
13349131 digits_masterof
 3303469 digits_mozg
> 
0

Mógłbyś też wykorzystać bibliotekę T-Regx:

pattern('\D+')->remove('4gh5hs6hh7')->all();

1 użytkowników online, w tym zalogowanych: 0, gości: 1