正则表达式替换数字,但以0开头的不是浮点数

时间:2016-11-11 23:18:22

标签: php regex

考虑以下字符串:

  

'“z”:“100”,“a”:“+ 0.5”,“b”:“ - 0.578”,“c”:“ - 。5”,“d”:“。55”,“ E “:” - 5" ,   “f”:“01234”,“g”:“0.999”,“i”:“153.35”'

我正在尝试转换此字符串中的每个数字,同时保留负号,除了以0开头的那些不浮点。换句话说,我正在尝试转换为

  

'“z”:100,“a”:0.5,“b”: - 0.578,“c”: - 。5,“d”:。55,“e”: - 5,“f”:“ 01234“,”g“:0.999,”i“:153.35'

这是我到目前为止所拥有的

preg_replace('/((?:\:")(?:[\+])?[\-]?([0-9\.]+?)[0-9]+(?:"))/', '$1', $string);

这还不够..困难的部分是保持 围绕 01234 ,同时为其他数字删除它们。

基本上我想忽略

(\:"[0][0-9]+")

Regexr link

2 个答案:

答案 0 :(得分:1)

您可以使用this regex来匹配引号之间的所有数字:

true

编辑:抱歉误读了你的问题,我更新了正则表达式以匹配每个数字,但是以0开头的不是浮点数

答案 1 :(得分:1)

您可以使用正则表达式(:)"(?!0\d+")\+?(-?(?:\d*\.)?\d+)"并将其替换为$1$2

请参阅ideone

$str = '"z":"100", "a":"+0.5", "b":"-0.578", "c":"-.5", "d":".55", "e":"-5", "f":"01234", "g":"0.999", "i":"153.35", "0":"5"';
$pattern = '/(:)"(?!0\d+")\+?(-?(?:\d*\.)?\d+)"/';
print(preg_replace($pattern, '$1$2', $str));