带点和运算符的Regex PHP小数

时间:2018-09-22 15:53:57

标签: php regex

我有一个列表,我想检索其中的所有十进制数字。它们的存储方式为+900.00或-240.30。
它们都有一个运算符“ +”或“-”。

$liste = "Pack Eclairage : Lave-phares Projecteurs Bi-X\u00e9non 35W directionnels Feux AV eclairage diurne LED : -400.00Etriers de freins Rouge : +200.00|Jantes en alliage 19\" Performance Noires (avec Pneus Run-On Flat) : +900.00|Pack Confort : Syst\u00e8me d'entr\u00e9e sans cl\u00e9s (conducteur et passager) Eclairage des poign\u00e9es de portes Compartiment porte-objets c\u00f4t\u00e9 conducteur Pare-soleil conducteur avec illumination : +580.00|Peinture Pastel Extra-s\u00e9rie Blanc Alfa : +650.00|Vitres AR privatives : +390.00";
$tab_liste = explode("|", $liste);

foreach($tab_liste as $option) {
    // regex here 
}

编辑: 如何在PHP中首先检索选项名称,其次检索运算符,然后再检索十进制数字? 谢谢。

3 个答案:

答案 0 :(得分:1)

您甚至不需要在这里使用explode(),因为preg_match_all可以处理给定输入字符串中的多个正则表达式匹配:

$liste = "Pack Eclairage : Lave-phares Projecteurs Bi-X\u00e9non 35W directionnels Feux AV eclairage diurne LED : -400.00Etriers de freins Rouge : +200.00|Jantes en alliage 19\" Performance Noires (avec Pneus Run-On Flat) : +900.00|Pack Confort : Syst\u00e8me d'entr\u00e9e sans cl\u00e9s (conducteur et passager) Eclairage des poign\u00e9es de portes Compartiment porte-objets c\u00f4t\u00e9 conducteur Pare-soleil conducteur avec illumination : +580.00|Peinture Pastel Extra-s\u00e9rie Blanc Alfa : +650.00|Vitres AR privatives : +390.00";
preg_match_all ("/([+\-])(\d+(\.\d+)?)/", $liste, $array);

for ($i=0; $i < count($array[1]); $i++) {
    echo $array[1][$i] . ", " . $array[2][$i] . "\n";
}

-, 400.00
+, 200.00
+, 900.00
+, 580.00
+, 650.00
+, 390.00

Demo

答案 1 :(得分:1)

您可以使用regex /[+-]\d+\.?\d*/m

<?php
$re = '/[+-]\d+\.?\d*/m';
$str = 'Pack Eclairage : Lave-phares Projecteurs Bi-X\\u00e9non 35W directionnels Feux AV eclairage diurne LED : -400.00Etriers de freins Rouge : +200.00|Jantes en alliage 19\\" Performance Noires (avec Pneus Run-On Flat) : +900.00|Pack Confort : Syst\\u00e8me d\'entr\\u00e9e sans cl\\u00e9s (conducteur et passager) Eclairage des poign\\u00e9es de portes Compartiment porte-objets c\\u00f4t\\u00e9 conducteur Pare-soleil conducteur avec illumination : +580.00|Peinture Pastel Extra-s\\u00e9rie Blanc Alfa : +650.00|Vitres AR privatives : +390.00';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
$result = call_user_func_array('array_merge',$matches);
print_r($result);
?>

输出

Array ( 
 [0] => -400.00 
 [1] => +200.00
 [2] => +900.00 
 [3] => +580.00 
 [4] => +650.00 
 [5] => +390.00
)

演示https://3v4l.org/X2DK6

答案 2 :(得分:0)

    $liste = "Pack Eclairage : Lave-phares Projecteurs Bi-X\u00e9non 35W directionnels Feux AV eclairage diurne LED : -400.00Etriers de freins Rouge : +200.00|Jantes en alliage 19\" Performance Noires (avec Pneus Run-On Flat) : +900.00|Pack Confort : Syst\u00e8me d'entr\u00e9e sans cl\u00e9s (conducteur et passager) Eclairage des poign\u00e9es de portes Compartiment porte-objets c\u00f4t\u00e9 conducteur Pare-soleil conducteur avec illumination : +580.00|Peinture Pastel Extra-s\u00e9rie Blanc Alfa : +650.00|Vitres AR privatives : +390.00";
    $tab_liste = explode("|", $liste);

    foreach($tab_liste as $option) {
        preg_match_all("#((\-|\+)[\d\.]+)#", $option, $matches);
       var_dump($matches[0]);
       echo "<br>";
    }