Wyszukiwanie podciagu liczb w łańcuchu znaków

Odpowiedz Nowy wątek
2019-05-09 13:29
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!

Pozostało 580 znaków

2019-05-09 13:43
2
$foo = preg_replace('/[^0-9]/', '', '4gh5hs6hh7');
echo $foo;  //4567

edytowany 1x, ostatnio: MasterOf, 2019-05-09 13:43

Pozostało 580 znaków

2019-05-09 13:43

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.


That game of life is hard to play
I'm gonna lose it anyway
The losing card I'll someday lay
So this is all I have to say
edytowany 1x, ostatnio: cerrato, 2019-05-09 13:44
Szybszy o 4 sekundy - MasterOf 2019-05-09 13:44
Wiem. Nie lubię Cię :P - cerrato 2019-05-09 13:44

Pozostało 580 znaków

2019-05-09 13:50
0

OK, dzięki wielkie!

Pozostało 580 znaków

2019-05-09 18:09
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
> 

Pozostało 580 znaków

2019-05-17 12:16
0

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

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

char mander; bool basaur;
Zaawansowana biblioteka T-Regx do wyrażeń regularnych w PHP

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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