我有以下代码
<?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
即我需要正则表达式来考虑仅限数字字符后的句点
答案 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