Ich möchte die Zahlen aus einer Zeichenfolge extrahieren, die Zahlen und Buchstaben enthält wie:
"In My Cart : 11 items"
Ich möchte hier die Nummer 11
oder eine andere Nummer bekommen.
Ich möchte die Zahlen aus einer Zeichenfolge extrahieren, die Zahlen und Buchstaben enthält wie:
"In My Cart : 11 items"
Ich möchte hier die Nummer 11
oder eine andere Nummer bekommen.
Antworten:
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
$newstr = preg_replace('!\d+!', '', $str);
. Es werden alle Ziffern aus Ihrer Zeichenfolge entfernt. Beispiel: $str = 'In My Cart : 11 12 items';
wird ausgegeben In My Cart : items
.
preg_replace("/[^0-9]/","",$string);
oderfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
extrahierte Ziffern, Plus- und Minuszeichen . Der Regex extrahierte nur Ziffern!
Wenn Sie nur alles andere als die Zahlen herausfiltern möchten, verwenden Sie am einfachsten filter_var :
$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
xxx-yyy-24
Sie bekommen --24
. Sie können str_repleace(array('+','-'), '', $result)
beide Zeichen löschen.
max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
stattdessen einfach Arrays und String-Ersetzungen verwenden.
abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
preg_replace('/[^0-9]/', '', $string);
Das sollte besser machen! ...
500.00
wird gedruckt:50000
extract the numbers from a string
- ein Dezimalpunkt ist keine Zahl!
'
und keine doppelten Anführungszeichen verwenden "
.
Verwenden von preg_replace
:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
Ausgabe: 1111111111
+387 (61) 634-783
String in 38761634783
direkt. Sie müssen sich nicht um Arrays wie Gauravs Antwort kümmern.
+
Quantifizierer für längere Übereinstimmungen / weniger Ersetzungen.
Für schwebende Zahlen
preg_match_all('!\d+\.?\d+!', $string ,$match);
Vielen Dank, dass Sie auf den Fehler hingewiesen haben. @ Mickmackusa
'!\d*.?\d+!'
?
als Quantifizierer des wörtlichen Punktes zu verwenden. Ich würde nicht erwarten, dass ein Gleitkommawert mehrere Dezimalpunktsymbole enthält. Yashs kommentiertes Muster ist ironischerweise falsch . Der Punkt benötigt einen Schrägstrich, um ihn wörtlich zu machen.
Ich besitze das Guthaben dafür nicht, aber ich muss es nur teilen. Dieser reguläre Ausdruck erhält Zahlen aus einer Zeichenfolge, einschließlich Dezimalstellen / Stellen sowie Kommas:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Zitiert von hier:
php - regex - wie extrahiere ich eine Zahl mit Dezimalstelle (Punkt und Komma) aus einer Zeichenfolge (z. B. 1.120,01)?
Sie können preg_match verwenden :
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
echo '<p>'.$m[0].'</p>';
Verwenden von preg_replace
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
+
Quantifizierer für längere Übereinstimmungen / weniger Ersetzungen.
Sie können folgende Funktion verwenden:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
\d
innerhalb einer Zeichenklasse hat keinen Vorteil . Da Sie auf das Fullstring-Match zugreifen, macht es keinen Sinn, eine Erfassungsgruppe in das Muster zu schreiben.
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);
Das erste implodierende Argument in diesem speziellen Fall lautet "Trenne jedes Element in Übereinstimmungen [0] mit einem einzelnen Leerzeichen." Implode setzt kein Leerzeichen (oder was auch immer Ihr erstes Argument ist) vor die erste Zahl oder nach die letzte Zahl.
Zu beachten ist außerdem, dass in $ match [0] das gefundene Array von Übereinstimmungen (die mit diesem regulären Ausdruck übereinstimmen) gespeichert wird.
Weitere Erläuterungen zu den anderen Indizes im Array finden Sie unter: http://php.net/manual/en/function.preg-match-all.php
Versuchen Sie dies, verwenden Sie preg_replace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
[^0-9]
ist einfacher geschrieben als \D
.
wir können int daraus wie extrahieren
$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
Demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
Befolgen Sie diesen Schritt, um die Zeichenfolge in eine Zahl umzuwandeln
$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");
$result=($onlyNumeric+100);
echo $result;
Ein anderer Weg, es zu tun:
$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
anders (gerade Unicode-Zeichenfolge):
$res = array();
$str = 'test 1234 555 2.7 string ..... 2.2 3.3';
$str = preg_replace("/[^0-9\.]/", " ", $str);
$str = trim(preg_replace('/\s+/u', ' ', $str));
$arr = explode(' ', $str);
for ($i = 0; $i < count($arr); $i++) {
if (is_numeric($arr[$i])) {
$res[] = $arr[$i];
}
}
print_r($res); //Array ( [0] => 1234 [1] => 555 [2] => 2.7 [3] => 2.2 [4] => 3.3 )
Dieses Skript erstellt zunächst eine Datei, schreibt Zahlen in eine Zeile und wechselt in eine nächste Zeile, wenn ein anderes Zeichen als die Zahl angezeigt wird. Zum Schluss werden die Zahlen wieder zu einer Liste sortiert.
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)
Abhängig von Ihrem Anwendungsfall kann dies auch eine Option sein:
$str = 'In My Cart : 11 items';
$num = '';
for ($i = 0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$num .= $str[$i];
}
}
echo $num; // 11
Obwohl ich einer Regex zustimmen filter_var()
würde oder im angegebenen Fall nützlicher wäre.
für utf8 str:
function unicodeStrDigits($str) {
$arr = array();
$sub = '';
for ($i = 0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$sub .= $str[$i];
continue;
} else {
if ($sub) {
array_push($arr, $sub);
$sub = '';
}
}
}
if ($sub) {
array_push($arr, $sub);
}
return $arr;
}
Wenn Sie nicht wissen, welches Format die Nummer hat? int oder float, dann benutze dies:
$string = '$125.22';
$string2 = '$125';
preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22
preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125
Diese Funktionen verarbeiten auch die schwebenden Zahlen
$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";
$str = preg_replace('/[^0-9\.]/','-', $str);
$str = preg_replace('/(\-+)(\.\.+)/','-', $str);
$str = trim($str, '-');
$arr = explode('-', $str);