मैं एक स्ट्रिंग से संख्याओं को निकालना चाहता हूं जिसमें संख्याएं और अक्षर शामिल हैं:
"In My Cart : 11 items"
मैं यहां नंबर 11या कोई अन्य नंबर लाना चाहता हूं ।
मैं एक स्ट्रिंग से संख्याओं को निकालना चाहता हूं जिसमें संख्याएं और अक्षर शामिल हैं:
"In My Cart : 11 items"
मैं यहां नंबर 11या कोई अन्य नंबर लाना चाहता हूं ।
जवाबों:
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
$newstr = preg_replace('!\d+!', '', $str);। यह आपके स्ट्रिंग से सभी अंकों को छीन लेगा। उदाहरण: $str = 'In My Cart : 11 12 items';आउटपुट होगा In My Cart : items।
preg_replace("/[^0-9]/","",$string);याfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);अंक, प्लस और माइनस साइन निकाले । Regex ने केवल अंक निकाले!
यदि आप केवल संख्याओं के अलावा अन्य सभी चीज़ों को फ़िल्टर करना चाहते हैं, तो फ़िल्टर_वर का उपयोग करना सबसे आसान है :
$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
xxx-yyy-24आपको मिल जाएगा --24। आप str_repleace(array('+','-'), '', $result)दोनों संकेतों को हटाने के लिए उपयोग कर सकते हैं ।
max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))एरे और स्ट्रिंग प्रतिस्थापन का उपयोग करने के बजाय कर सकते हैं ।
abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
preg_replace('/[^0-9]/', '', $string);
यह बेहतर काम करना चाहिए! "
500.00प्रिंट होगा:50000
extract the numbers from a string- एक दशमलव बिंदु एक संख्या नहीं है!
'और दोहरे कोट्स का नहीं "।
का उपयोग कर preg_replace:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
आउटपुट: 1111111111
+387 (61) 634-783स्ट्रिंग को परिवर्तित करता है 38761634783। आपको गौरव के जवाब की तरह सरणियों का ध्यान नहीं रखना है।
+क्वांटिफायर को लंबे मैचों / कम प्रतिस्थापन से मिलान करने की सलाह देता हूं ।
अस्थायी संख्या के लिए,
preg_match_all('!\d+\.?\d+!', $string ,$match);
गलती को इंगित करने के लिए धन्यवाद। @mickmackusa
'!\d*.?\d+!'
?शाब्दिक बिंदु के क्वांटिफायर के रूप में उपयोग करना पसंद करूंगा । मैं कई दशमलव बिंदु प्रतीकों को शामिल करने के लिए एक फ्लोट मान की उम्मीद नहीं करूंगा। यश की टिप्पणी की पैटर्न है गलत विडंबना यह है कि। डॉट को शाब्दिक बनाने के लिए इसके सामने एक स्लैश चाहिए।
इसका श्रेय मेरे पास नहीं है, लेकिन मुझे इसे साझा करना है। इस रेगेक्स को एक स्ट्रिंग से नंबर मिलेंगे, जिसमें दशमलव अंक / स्थान शामिल हैं, साथ ही अल्पविराम:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
यहाँ से उद्धृत:
php - regex - एक स्ट्रिंग से दशमलव (डॉट और अल्पविराम) के साथ एक संख्या कैसे निकालें (जैसे 1,120.01)?
आप preg_match का उपयोग कर सकते हैं :
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
echo '<p>'.$m[0].'</p>';
Preg_replace का उपयोग करना
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
+क्वांटिफायर को लंबे मैचों / कम प्रतिस्थापन से मिलान करने की सलाह देता हूं ।
आप निम्नलिखित समारोह का उपयोग कर सकते हैं:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
\dचरित्र वर्ग के अंदर लिखने का कोई लाभ नहीं है । चूंकि आप फुलस्ट्रिंग मैच को एक्सेस कर रहे हैं, इसलिए कैप्चर ग्रुप को पैटर्न में लिखने का कोई मतलब नहीं है।
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);
इस विशिष्ट मामले में निहितार्थ में पहला तर्क "प्रत्येक तत्व को मैचों में अलग करता है [0] एक ही स्थान के साथ।" पहले नंबर से पहले या आखिरी नंबर के बाद Implode एक स्पेस नहीं देगा (या जो भी आपका पहला तर्क है)।
नोट करने के लिए कुछ और है $ मैच [0] वह जगह जहां मैचों की सरणी (यह नियमित अभिव्यक्ति से मेल खाती है) संग्रहीत हैं।
सरणी में अन्य सूचकांक क्या हैं, इस पर आगे स्पष्टीकरण के लिए: http://php.net/manual/en/function.preg-match-all.php
इसे आज़माएं, preg_replace का उपयोग करें
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
[^0-9]और अधिक बस के रूप में लिखा है \D।
हम इस तरह से int निकाल सकते हैं
$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
डेमो: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
इस चरण का पालन करें यह स्ट्रिंग को संख्या में बदल देगा
$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");
$result=($onlyNumeric+100);
echo $result;
इसे करने का दूसरा तरीका:
$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
अन्य तरीके (यूनिकोड स्ट्रिंग भी):
$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 )
यह स्क्रिप्ट पहली बार में एक फ़ाइल बनाता है, एक पंक्ति में नंबर लिखता है और अगली पंक्ति में बदल जाता है यदि संख्या के अलावा एक चरित्र मिलता है। अंत में, फिर से यह एक सूची में संख्याओं को छांटता है।
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)
आपके उपयोग के मामले के आधार पर, यह एक विकल्प भी हो सकता है:
$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
हालांकि मैं एक रेगेक्स से सहमत हूं या filter_var()बताए गए मामले में अधिक उपयोगी होगा।
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;
}
यदि आपको नहीं पता कि नंबर कौन सा है? इंट या फ्लोटिंग, फिर इसका उपयोग करें:
$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
यह फ़ंक्शन फ़्लोटिंग नंबरों को भी हैंडल करेगा
$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);