正则表达式,仅在php中考虑数字字符后的句点

时间:2014-01-09 07:28:50

标签: php regex preg-replace

我有以下代码

<?php
$str="$str="115(JOHN DOE.)      900,000.00 SALARY.    45 AGE.   "; 
$str=preg_replace("/[a-zA-Z(),]/", "", $str);          
echo $str=preg_replace('!\s+!', ',', $str);
?>

此输出

115,.,900000.00.,45.,

但这不是我需要的,我需要考虑900,000.00以内的期间而忽略JOHN DOE的期限。 ,SALARY。,AGE。

我该怎么做才能获得

115,900000.00,45

即我需要正则表达式来考虑仅限数字字符后的句点

3 个答案:

答案 0 :(得分:2)

不试图改进你的代码......这应该这样做:

$str="115(JOHN DOE.)      900,000.00(SALARY.)    45(AGE.)";
$str=preg_replace("/[a-zA-Z]+\.+/", "", $str);
$str=preg_replace("/[a-zA-Z(),]/", "", $str);
echo $str=preg_replace('!\s+!', ',', $str);

答案 1 :(得分:0)

我分三步完成:

$a = "115(JOHN DOE.)      900,000.00(SALARY.)";
$a = preg_replace("/\([A-Z ]*\.\)/", "", $a);          // 115      900,000.00
$b = preg_replace("/,/", "", $a);                     // 115      900000.00
$c = preg_replace("/\s+/", ",", $b);                  // 115,900000.00

您可以更改此行:

$a = preg_replace("/\([A-Z ]*\.\)/", "", $a);

用这个:

$a = preg_replace("/[A-Z ]*\./", "", $a);

删除没有括号的数据。

答案 2 :(得分:0)

$str = '115(JOHN DOE.)      900,000.00 SALARY.    45 AGE. ';
preg_match_all("/\d+(?:(?:[,.]\d+)+)?/", $str, $match);
$match = array_map(function($val) { return str_replace(",", "", $val); }, $match[0]);
echo implode(",", $match);

<强>输出

115,900000.00,45