我已经为此工作了一段时间,但我的正则表达式很弱。
我需要检查一个数字是否为整数(一位数),如果是,则在其上附加一个“.001”。问题是,它位于一行的中间,其中的值用逗号分隔。
材料,1,1,9999;1 4PL1 PB_Mel,, 1 ,6,0.173,0.173,0.375,0,0.375,0,0,0,0,2,0,1,1
需要是
材料,1,1,9999;1 4PL1 PB_Mel,, 1.001 ,6,0.173,0.173,0.375,0,0.375,0,0,0,0,2,0,1,1
- 该行必须以“材料”开头。
- 有多个 MATERIALS 行。
- 该值将始终在 5 个逗号之后。
我正在尝试这样的事情来替换数字,但我认为这种方法不太正确:
$stripped = preg_replace('/(MATERIALS)(,.*?){4}(,\d+?),/', '\2,', $stripped);
我尝试通过 preg_match_all > for > if 进程,至少让条件工作,但我仍然需要替换这些行。
编辑:我忘记了preg_match_all
进行循环的那一行。
preg_match_all('/MATERIALS.*/', $stripped, $materialsLines);
for($i=0;$i<sizeof($materialsLines[0]);$i++) {
$section = explode(",",$materialsLines[0][$i]);
if (strlen($section[5]) == 1) {
$section[5] .= ".001";
}
$materialsLines[0][$i] = implode(",",$section);
}