Jak mogę uzyskać mój numer w prostej zmiennej, a nie w tablicy?
Bizboss,
34
$ var = implode ('', $ dopasowania [0]);
Gaurav
2
@Bizboss W podobnym stylu spróbuj $newstr = preg_replace('!\d+!', '', $str);. Usunie wszystkie cyfry z łańcucha. Przykład: $str = 'In My Cart : 11 12 items';wyświetli In My Cart : items.
Aether
77
nie jest to sposób przyjazny dla zasobów. użyj preg_replace("/[^0-9]/","",$string);lubfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
eapo
6
@eapo filter_var($str, FILTER_SANITIZE_NUMBER_INT);wyodrębnił cyfry, znak plus i minus . Wyrażenie regularne wyodrębnia tylko cyfry!
PATROMO,
535
Jeśli chcesz tylko odfiltrować wszystko poza liczbami, najłatwiej jest użyć filter_var :
Myślnik przed liczbą będzie traktowany jako minus.
Elnur Abdurrakhimov
43
Nie tylko przed liczbą. Wszelkie +/- nie zostaną obcięte. Jeśli tak xxx-yyy-24, dostaniesz --24. Możesz użyć, str_repleace(array('+','-'), '', $result)aby usunąć oba znaki.
imclickingmaniac
4
@imclickingmaniac można po prostu zrobić max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))zamiast tego za pomocą tablic i zamian ciągów.
Eduard
2
użycie max () również zwraca znak minus w łańcuchach, mam nadzieję, że strreplace () jest tutaj opcją. Dziękuję za wskazówki.
Podoba mi się to, ponieważ zwraca ciąg znaków, a nie tablicę taką jak w przykładach z preg_match_all, i podoba mi się to, ponieważ chcę tylko liczb, a nie znaku plus lub myślnika, jak w przykładzie filter_var.
Darrell Duane
43
Uważaj na tę metodę: coś w stylu „In My Car_Price: 500.00wydrukuje:50000
ErickBest,
16
@ErickBest To dobrze, biorąc pod uwagę pytanie: extract the numbers from a stringprzecinek dziesiętny nie jest liczbą!
rybo111
1
To jest nitpick, ale prawdopodobnie chcesz używać pojedynczych cudzysłowów, 'a nie podwójnych ".
To jest rzeczywiście złe :) Powinno być'!\d*.?\d+!'
Yash
Wolałbym użyć ?jako kwantyfikatora dosłownej kropki. Nie spodziewałbym się, że wartość zmiennoprzecinkowa będzie zawierać wiele symboli dziesiętnych. Skomentowany wzór Yash jest ironicznie niewłaściwy . Kropka potrzebuje przed nią ukośnika, aby był dosłowny.
mickmackusa
11
Nie jestem właścicielem tego kredytu, ale muszę go po prostu podzielić. Ten wyrażenie regularne otrzyma liczby z ciągu, w tym miejsca / miejsca po przecinku, a także przecinki:
To nie sprawdza poprawności ciągu przecinka między zestawami trzech liczb całkowitych. ... problem z kopiowaniem i wklejaniem czyichś wzorców oraz ich niezrozumieniem / testowaniem.
Pisanie \dwewnątrz klasy postaci nie ma żadnej korzyści . Ponieważ uzyskujesz dostęp do dopasowania pełnego ciągu, nie ma sensu pisać grupy przechwytywania do wzorca.
Pierwszy argument w implode w tym konkretnym przypadku mówi „oddziel każdy element w dopasowaniach [0] pojedynczą spacją”. Implode nie umieści spacji (ani żadnego innego pierwszego argumentu) przed pierwszą liczbą ani po ostatniej liczbie.
Warto zwrócić uwagę na $ dopasowania [0], gdzie przechowywana jest tablica dopasowań (pasujących do tego wyrażenia regularnego).
$string ='In My Car_Price : 50660.00';
echo intval(preg_replace('/[^0-9.]/','',$string));# without number format output: 50660
echo number_format(intval(preg_replace('/[^0-9.]/','',$string)));# with number format output :50,660
Ten skrypt najpierw tworzy plik, zapisuje liczby w linii i przechodzi do następnej linii, jeśli otrzyma znak inny niż liczba. W końcu znowu porządkuje liczby na liście.
string1 ="hello my name 12 is after 198765436281094and14 and 124de"
f= open("created_file.txt","w+")for a in string1:if a in['1','2','3','4','5','6','7','8','9','0']:
f.write(a)else:
f.write("\n"+a+"\n")
f.close()#desired_numbers=[x for x in open("created_file.txt")]#print(desired_numbers)
k=open("created_file.txt","r")
desired_numbers=[]for x in k:
l=x.rstrip()print(len(l))if len(l)==15:
desired_numbers.append(l)#desired_numbers=[x for x in k if len(x)==16]print(desired_numbers)
Wprowadzenie łączników do tego procesu jest całkowicie niepotrzebne. W tej odpowiedzi brakuje również wyjaśnienia, jak to działa i dlaczego uważasz, że to dobry pomysł.
Odpowiedzi:
źródło
$newstr = preg_replace('!\d+!', '', $str);
. Usunie wszystkie cyfry z łańcucha. Przykład:$str = 'In My Cart : 11 12 items';
wyświetliIn My Cart : items
.preg_replace("/[^0-9]/","",$string);
lubfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
wyodrębnił cyfry, znak plus i minus . Wyrażenie regularne wyodrębnia tylko cyfry!Jeśli chcesz tylko odfiltrować wszystko poza liczbami, najłatwiej jest użyć filter_var :
źródło
xxx-yyy-24
, dostaniesz--24
. Możesz użyć,str_repleace(array('+','-'), '', $result)
aby usunąć oba znaki.max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
zamiast tego za pomocą tablic i zamian ciągów.abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
To powinno zrobić lepszą robotę! ...
źródło
500.00
wydrukuje:50000
extract the numbers from a string
przecinek dziesiętny nie jest liczbą!'
a nie podwójnych"
.Używanie
preg_replace
:Wyjście: 1111111111
źródło
+387 (61) 634-783
ciąg38761634783
bezpośrednio na. Nie musisz zajmować się takimi tablicami, jak odpowiedź Gaurava.+
kwantyfikatorowi dopasowanie dłuższych dopasowań / mniejszej liczby zamienników.W przypadku liczb zmiennoprzecinkowych
Dzięki za zwrócenie uwagi na błąd. @mickmackusa
źródło
'!\d*.?\d+!'
?
jako kwantyfikatora dosłownej kropki. Nie spodziewałbym się, że wartość zmiennoprzecinkowa będzie zawierać wiele symboli dziesiętnych. Skomentowany wzór Yash jest ironicznie niewłaściwy . Kropka potrzebuje przed nią ukośnika, aby był dosłowny.Nie jestem właścicielem tego kredytu, ale muszę go po prostu podzielić. Ten wyrażenie regularne otrzyma liczby z ciągu, w tym miejsca / miejsca po przecinku, a także przecinki:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Cytowano stąd:
php - regex - jak wyodrębnić liczbę dziesiętną (kropka i przecinek) z ciągu (np. 1 120,01)?
źródło
Możesz użyć preg_match :
źródło
echo '<p>'.$m[0].'</p>';
Korzystanie z preg_replace
źródło
+
kwantyfikatorowi dopasowanie dłuższych dopasowań / mniejszej liczby zamienników.Możesz użyć następującej funkcji:
źródło
\d
wewnątrz klasy postaci nie ma żadnej korzyści . Ponieważ uzyskujesz dostęp do dopasowania pełnego ciągu, nie ma sensu pisać grupy przechwytywania do wzorca.Pierwszy argument w implode w tym konkretnym przypadku mówi „oddziel każdy element w dopasowaniach [0] pojedynczą spacją”. Implode nie umieści spacji (ani żadnego innego pierwszego argumentu) przed pierwszą liczbą ani po ostatniej liczbie.
Warto zwrócić uwagę na $ dopasowania [0], gdzie przechowywana jest tablica dopasowań (pasujących do tego wyrażenia regularnego).
Więcej informacji na temat innych indeksów w tablicy można znaleźć na stronie: http://php.net/manual/en/function.preg-match-all.php
źródło
spróbuj tego, użyj preg_replace
PRÓBNY
źródło
[^0-9]
jest po prostu napisane jako\D
.Lub
Lub
Zwróci tylko wartość liczbową
źródło
możemy z tego wyodrębnić int
demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
źródło
Wykonaj ten krok, aby przekonwertować ciąg na liczbę
Kolejny sposób to zrobić:
źródło
w inny sposób (nawet ciąg Unicode):
źródło
Ten skrypt najpierw tworzy plik, zapisuje liczby w linii i przechodzi do następnej linii, jeśli otrzyma znak inny niż liczba. W końcu znowu porządkuje liczby na liście.
źródło
W zależności od przypadku użycia może to być również opcja:
Chociaż zgodziłbym się na wyrażenie regularne lub
filter_var()
byłoby bardziej przydatne w podanym przypadku.źródło
dla utf8 str:
źródło
źródło
Ta funkcja obsługuje również liczby zmiennoprzecinkowe
źródło