Tôi muốn trích xuất các số từ một chuỗi có chứa các số và chữ như:
"In My Cart : 11 items"
Tôi muốn ở đây để có được số 11
hoặc bất kỳ số nào khác.
Tôi muốn trích xuất các số từ một chuỗi có chứa các số và chữ như:
"In My Cart : 11 items"
Tôi muốn ở đây để có được số 11
hoặc bất kỳ số nào khác.
Câu trả lời:
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
$newstr = preg_replace('!\d+!', '', $str);
. Nó sẽ loại bỏ tất cả các chữ số từ chuỗi của bạn. Ví dụ: $str = 'In My Cart : 11 12 items';
sẽ xuất In My Cart : items
.
preg_replace("/[^0-9]/","",$string);
hoặcfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
trích xuất các chữ số, dấu cộng và dấu trừ . Các regex chỉ trích xuất các chữ số!
Nếu bạn chỉ muốn lọc mọi thứ ngoài các số, cách dễ nhất là sử dụng bộ lọc_var :
$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
xxx-yyy-24
bạn sẽ nhận được --24
. Bạn có thể sử dụng str_repleace(array('+','-'), '', $result)
để xóa cả hai dấu hiệu.
max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
thay vì sử dụng mảng và thay thế chuỗi.
abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
preg_replace('/[^0-9]/', '', $string);
Điều này sẽ làm công việc tốt hơn! ...
500.00
sẽ in:50000
extract the numbers from a string
- dấu thập phân không phải là số!
'
và không phải dấu ngoặc kép "
.
Sử dụng preg_replace
:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
Đầu ra: 1111111111
+387 (61) 634-783
chuỗi thành 38761634783
trực tiếp. Bạn không cần phải quan tâm đến các mảng như câu trả lời của Gaurav.
+
định lượng để khớp các trận đấu dài hơn / ít lần thay thế hơn.
Đối với số nổi,
preg_match_all('!\d+\.?\d+!', $string ,$match);
Cảm ơn đã chỉ ra sai lầm. @mickmackusa
'!\d*.?\d+!'
?
như là bộ định lượng của dấu chấm. Tôi sẽ không mong đợi một giá trị nổi có chứa nhiều ký hiệu dấu thập phân. Mô hình bình luận của Yash là sai trớ trêu. Dấu chấm cần một dấu gạch chéo ở phía trước để làm cho nó theo nghĩa đen.
Tôi không sở hữu tín dụng cho việc này, nhưng tôi chỉ phải chia sẻ nó. Regex này sẽ nhận được các số từ một chuỗi, bao gồm các dấu thập phân / vị trí, cũng như dấu phẩy:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Trích dẫn từ đây:
php - regex - làm thế nào để trích xuất một số có số thập phân (dấu chấm và dấu phẩy) từ một chuỗi (ví dụ: 1.120,01)?
Bạn có thể sử dụng preg_match :
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
echo '<p>'.$m[0].'</p>';
Sử dụng preg numplace
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
+
định lượng để khớp các trận đấu dài hơn / ít lần thay thế hơn.
Bạn có thể sử dụng chức năng sau:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
\d
bên trong một lớp nhân vật. Vì bạn đang truy cập vào kết hợp chuỗi đầy đủ, không có ý nghĩa gì khi viết một nhóm chụp vào mẫu.
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);
Đối số đầu tiên trong mã hóa trong trường hợp cụ thể này cho biết "tách từng phần tử trong khớp [0] với một khoảng trắng". Implode sẽ không đặt dấu cách (hoặc bất kể đối số đầu tiên của bạn là gì) trước số đầu tiên hoặc sau số cuối cùng.
Một thứ khác cần lưu ý là $ khớp [0] là nơi lưu trữ các mảng trùng khớp (khớp với biểu thức chính quy này).
Để làm rõ hơn về những gì các chỉ mục khác trong mảng được xem: http://php.net/manual/en/feft.preg-match-all.php
Hãy thử điều này, sử dụng preg numplace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
[^0-9]
được viết đơn giản hơn là \D
.
chúng ta có thể trích xuất int từ nó như
$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
bản demo: http://sandbox.onlinephpfifts.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
Thực hiện theo bước này, nó sẽ chuyển đổi chuỗi thành số
$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");
$result=($onlyNumeric+100);
echo $result;
Một cách khác để làm điều đó:
$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
cách khác (chuỗi unicode chẵn):
$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 )
Kịch bản lệnh này tạo một tệp lúc đầu, ghi số vào một dòng và thay đổi thành dòng tiếp theo nếu nhận được một ký tự không phải là số. Cuối cùng, một lần nữa, nó sắp xếp các con số vào một danh sách.
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)
Tùy thuộc vào trường hợp sử dụng của bạn, đây cũng có thể là một tùy chọn:
$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
Mặc dù tôi đồng ý một biểu thức chính quy hoặc filter_var()
sẽ hữu ích hơn trong trường hợp đã nêu.
cho 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;
}
Nếu bạn không biết định dạng nào là số? int hoặc nổi, sau đó sử dụng này:
$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
Hàm này cũng sẽ xử lý các số nổi
$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);