Qanday qilib butun sonlarni o'z ichiga olgan magistraldan suzuvchi (o'n sakkiz) aylantiriladi

Men faqat registrni topa olmaysan, faqat mag'lubiyatdan suzib yurishni. Quyidagi qatorni ko'rib chiqing:

$string = "8x2.1 3x2";

Men 2.1 ni chiqarib olishni istayman, men quyidagi harakatlarni sinab ko'rdim, lekin bu menga butun sonlarni beradi va o'zgaradi:

preg_match_all('/[0-9,]+(?:\.[0-9]*)?/', $string, $matches);

So'ngra floatlarni tekshirish uchun is_float ni ishlatmoqchi bo'ldim, lekin bu ham bir sababga ko'ra tamsayılarni qaytaradi. Har qanday fikr bormi? rahmat

1
Sinab ko'ring: /[0-9,] + \. [0-9] +/
qo'shib qo'ydi muallif anubhava, manba
Sinab ko'ring: /[0-9,] + \. [0-9] +/
qo'shib qo'ydi muallif anubhava, manba
Sinab ko'ring: /[0-9,] + \. [0-9] +/
qo'shib qo'ydi muallif anubhava, manba
Bundan tashqari $ matches da satrlari bo'ladi va is_float() har doim FALSE kodini qaytaradi.
qo'shib qo'ydi muallif AbraCadaver, manba
Bundan tashqari $ matches da satrlari bo'ladi va is_float() har doim FALSE kodini qaytaradi.
qo'shib qo'ydi muallif AbraCadaver, manba
Bundan tashqari $ matches da satrlari bo'ladi va is_float() har doim FALSE kodini qaytaradi.
qo'shib qo'ydi muallif AbraCadaver, manba
Regex qanday ishlashini bilasizmi? Bu qism nimani anglatadi? (?: \. [0-9] *)?
qo'shib qo'ydi muallif Chris, manba
Regex qanday ishlashini bilasizmi? Bu qism nimani anglatadi? (?: \. [0-9] *)?
qo'shib qo'ydi muallif Chris, manba
thanks @anubhava
qo'shib qo'ydi muallif Ali Zeaiter, manba
thanks @anubhava
qo'shib qo'ydi muallif Ali Zeaiter, manba
thanks @anubhava
qo'shib qo'ydi muallif Ali Zeaiter, manba

6 javoblar

Ushbu oddiy misolni ko'rib chiqaylik:

<?php
$input = "8x2.1 3x2";
preg_match('/\d+\.\d+/', $input, $tokens);
print_r($tokens);

"Bir yoki bir nechta raqamga to'g'ri keladi, undan keyin bitta to'liq to'xtatish va yana bitta yoki bir nechta raqam".

Chiqish aniq:

Array
(
    [0] => 2.1
)
6
qo'shib qo'ydi
rahmat, men buni o'tkazib yubordim. Ro'yxatga kelganda, men hali ham noob emasman.
qo'shib qo'ydi muallif Ali Zeaiter, manba

Ushbu oddiy misolni ko'rib chiqaylik:

<?php
$input = "8x2.1 3x2";
preg_match('/\d+\.\d+/', $input, $tokens);
print_r($tokens);

"Bir yoki bir nechta raqamga to'g'ri keladi, undan keyin bitta to'liq to'xtatish va yana bitta yoki bir nechta raqam".

Chiqish aniq:

Array
(
    [0] => 2.1
)
6
qo'shib qo'ydi
rahmat, men buni o'tkazib yubordim. Ro'yxatga kelganda, men hali ham noob emasman.
qo'shib qo'ydi muallif Ali Zeaiter, manba

Ushbu oddiy misolni ko'rib chiqaylik:

<?php
$input = "8x2.1 3x2";
preg_match('/\d+\.\d+/', $input, $tokens);
print_r($tokens);

"Bir yoki bir nechta raqamga to'g'ri keladi, undan keyin bitta to'liq to'xtatish va yana bitta yoki bir nechta raqam".

Chiqish aniq:

Array
(
    [0] => 2.1
)
6
qo'shib qo'ydi
rahmat, men buni o'tkazib yubordim. Ro'yxatga kelganda, men hali ham noob emasman.
qo'shib qo'ydi muallif Ali Zeaiter, manba

Sizning regeksingiz float va tamsayılar, va hatto faqat vergullardan tashkil topgan satrlar.

  • [0-9,]+ - 1 or more digits or ,
  • (?:\.[0-9]*)? - one or zero sequences of . + zero or more digits.

Senga kerak

/\d+\.\d+/

Bu 1+ raqam, . va 1+ raqamlarga mos keladi.

Yoki salbiy va ijobiy yuruvchi suzishlarni ham ko'rish uchun, avval boshida ixtiyoriy - qo'shing:

/-?\d+\.\d+/

tafsilotlar

  • -? - one or zero hyphens (? means match one or zero occurrences)
  • \d+ - one or more digits (+ means match one or more occurrences, \d matches a digit char)
  • \. - a literal dot (since a dot in a regex is a special metacharacter, it should be escaped to denote a literal dot)
  • \d+ - one or more digits

PHP demo:

$string = "8x2.1 3x2";
preg_match_all('/\d+\.\d+/', $string, $matches);
print_r($matches[0]);
// => Array ( [0] => 2.1 )

"Bonus" regexi faqat ixtiyoriy eksponatga ega bo'lgan suzuvchi raqamlarga mos keladi (regexning varianti muntazam- expressions.info ):

 /[-+]?\d+\.\d+(?:e[-+]?\d+)?/i

Bu erda ixtiyoriy + yoki - mos keladigan ( [- +]? ), keyin yuqorida ko'rsatilgan naqsh e E yoki (<:>) ga mos keladigan ixtiyoriy bo'lmagan guruh keladi. [- +]? ixtiyoriy + yoki - </i /code> va \ d + `1+ raqamlari bilan mos keladi.

3
qo'shib qo'ydi
Albatta, tafsilotlarni qo'shdim.
qo'shib qo'ydi muallif Wiktor Stribi?ew, manba
Qanday salbiy suzgichlarda, siz bunga muhtojmisiz? Ehtimol, misol ma'lumotlarini hisobga olmaydilar.
qo'shib qo'ydi muallif AbraCadaver, manba
Wiktor izohiga rahmat!
qo'shib qo'ydi muallif Ali Zeaiter, manba
Ko'p rahmat, men uchun regexni tushuntira olasizmi?
qo'shib qo'ydi muallif Ali Zeaiter, manba

Sizning regeksingiz float va tamsayılar, va hatto faqat vergullardan tashkil topgan satrlar.

  • [0-9,]+ - 1 or more digits or ,
  • (?:\.[0-9]*)? - one or zero sequences of . + zero or more digits.

Senga kerak

/\d+\.\d+/

Bu 1+ raqam, . va 1+ raqamlarga mos keladi.

Yoki salbiy va ijobiy yuruvchi suzishlarni ham ko'rish uchun, avval boshida ixtiyoriy - qo'shing:

/-?\d+\.\d+/

tafsilotlar

  • -? - one or zero hyphens (? means match one or zero occurrences)
  • \d+ - one or more digits (+ means match one or more occurrences, \d matches a digit char)
  • \. - a literal dot (since a dot in a regex is a special metacharacter, it should be escaped to denote a literal dot)
  • \d+ - one or more digits

PHP demo:

$string = "8x2.1 3x2";
preg_match_all('/\d+\.\d+/', $string, $matches);
print_r($matches[0]);
// => Array ( [0] => 2.1 )

"Bonus" regexi faqat ixtiyoriy eksponatga ega bo'lgan suzuvchi raqamlarga mos keladi (regexning varianti muntazam- expressions.info ):

 /[-+]?\d+\.\d+(?:e[-+]?\d+)?/i

Bu erda ixtiyoriy + yoki - mos keladigan ( [- +]? ), keyin yuqorida ko'rsatilgan naqsh e E yoki (<:>) ga mos keladigan ixtiyoriy bo'lmagan guruh keladi. [- +]? ixtiyoriy + yoki - </i /code> va \ d + `1+ raqamlari bilan mos keladi.

3
qo'shib qo'ydi
Albatta, tafsilotlarni qo'shdim.
qo'shib qo'ydi muallif Wiktor Stribi?ew, manba
Qanday salbiy suzgichlarda, siz bunga muhtojmisiz? Ehtimol, misol ma'lumotlarini hisobga olmaydilar.
qo'shib qo'ydi muallif AbraCadaver, manba
Wiktor izohiga rahmat!
qo'shib qo'ydi muallif Ali Zeaiter, manba
Ko'p rahmat, men uchun regexni tushuntira olasizmi?
qo'shib qo'ydi muallif Ali Zeaiter, manba

Sizning regeksingiz float va tamsayılar, va hatto faqat vergullardan tashkil topgan satrlar.

  • [0-9,]+ - 1 or more digits or ,
  • (?:\.[0-9]*)? - one or zero sequences of . + zero or more digits.

Senga kerak

/\d+\.\d+/

Bu 1+ raqam, . va 1+ raqamlarga mos keladi.

Yoki salbiy va ijobiy yuruvchi suzishlarni ham ko'rish uchun, avval boshida ixtiyoriy - qo'shing:

/-?\d+\.\d+/

tafsilotlar

  • -? - one or zero hyphens (? means match one or zero occurrences)
  • \d+ - one or more digits (+ means match one or more occurrences, \d matches a digit char)
  • \. - a literal dot (since a dot in a regex is a special metacharacter, it should be escaped to denote a literal dot)
  • \d+ - one or more digits

PHP demo:

$string = "8x2.1 3x2";
preg_match_all('/\d+\.\d+/', $string, $matches);
print_r($matches[0]);
// => Array ( [0] => 2.1 )

"Bonus" regexi faqat ixtiyoriy eksponatga ega bo'lgan suzuvchi raqamlarga mos keladi (regexning varianti muntazam- expressions.info ):

 /[-+]?\d+\.\d+(?:e[-+]?\d+)?/i

Bu erda ixtiyoriy + yoki - mos keladigan ( [- +]? ), keyin yuqorida ko'rsatilgan naqsh e E yoki (<:>) ga mos keladigan ixtiyoriy bo'lmagan guruh keladi. [- +]? ixtiyoriy + yoki - </i /code> va \ d + `1+ raqamlari bilan mos keladi.

3
qo'shib qo'ydi
Albatta, tafsilotlarni qo'shdim.
qo'shib qo'ydi muallif Wiktor Stribi?ew, manba
Qanday salbiy suzgichlarda, siz bunga muhtojmisiz? Ehtimol, misol ma'lumotlarini hisobga olmaydilar.
qo'shib qo'ydi muallif AbraCadaver, manba
Wiktor izohiga rahmat!
qo'shib qo'ydi muallif Ali Zeaiter, manba
Ko'p rahmat, men uchun regexni tushuntira olasizmi?
qo'shib qo'ydi muallif Ali Zeaiter, manba
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin