字符串 正则问题 本帖最后由 lazygc520 于 2010-04-08 11:09:46 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$arr = $arr1 . ' ' . $arr2;$result = preg_split("/[\s,]+/",$arr);print_r($result); 楼上的,这个方法好像不对吧。我是想把$arr1中的”1 4-32640“这两项变成一项来处理。 这不大可能,因为你的日志文件使用了同样的分隔符。不过你可以这样$arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$result1 = preg_split("/[\s,]+/",$arr1);$result2 = preg_split("/[\s,]+/",$arr2);foo($result1);foo($result2);print_r($result1);print_r($result2);function foo(&$ar) { if(count($ar) == 41) return; $fmt = '%-' . (13 - strlen($ar[14])) . 's%s'; $ar[13] = sprintf($fmt, $ar[13], $ar[14]); unset($ar[14]); $ar = array_slice($ar, 0);} <?php$arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";//$arr = $arr1 . ' ' . $arr2;$arr = array();//$result = preg_split("/[\s,]+/",$arr);//print_r($result);$arr1 = preg_split("/[\s,]+/",$arr1);for($i=0; $i<count($arr1); $i++) { if($arr1[$i] == '1' && $arr1[$i+1] == '4-32640') $arr[count($arr)] = $arr1[$i].$arr1[$i+1]; else { $arr[count($arr)] = $arr1[$i]; if($arr[$i] == '4-32640') unset($arr[$i]); } }print_r($arr);//$result1 = preg_split("/[\s,]+/",$arr1);//$result2 = preg_split("/[\s,]+/",$arr2);//print_r($result1);//print_r($result2);?> $arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";问题是出在这两块红色的地方,如果这项数据的值是稳定的,几种值中间选定,把8楼的代码改改就能用了,如果位置是稳定的,可以保证是13列出问题,请参考6楼的。如果非要和并,请楼主最好能提供 这两块位置字段的明显的变化规则来。如果确定为 \d\s*\d+\-\d+ (1 4-32640) 和 \d+\-\d+\-\d+ (1-13613-11437[)这两种情况的化,可以用正则环视(又叫预判)来解决。总之想要匹配什么,总要能先把同与不同找出来。 不能光说,我又想按空格来区分,又想不按空间来区分这样的问题,是没有明细化的,我就不知道怎么下手了。 linux如何自动运行webservice php页面中,弹出层的问题,在线等 php正则替换,在线等待 数组针对某项的求和问题 一个下载地址防盗的判断 大牛进来看下! 上传程序的路径问题!? 发表主题: 求助高手 如何从数据库中随机抽取试题 求救!php问题急急! 回来看一看,顺便问一个简单问题! 求一条apache的rewirte伪静态,实现http访问自动跳转到https 问个mysql多表查询的排序问题 只能输入数字的问题
$arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
$arr = $arr1 . ' ' . $arr2;
$result = preg_split("/[\s,]+/",$arr);
print_r($result);
不过你可以这样$arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
$result1 = preg_split("/[\s,]+/",$arr1);
$result2 = preg_split("/[\s,]+/",$arr2);foo($result1);
foo($result2);print_r($result1);
print_r($result2);function foo(&$ar) {
if(count($ar) == 41) return;
$fmt = '%-' . (13 - strlen($ar[14])) . 's%s';
$ar[13] = sprintf($fmt, $ar[13], $ar[14]);
unset($ar[14]);
$ar = array_slice($ar, 0);
}
$arr1 = "FAB3 0 31 14 0 946 144 0 23 QC 65 P 11 1 4-32640 -458.0MV 0.00A 0.00A 3.2MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 226.6MM 726.6MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
//$arr = $arr1 . ' ' . $arr2;
$arr = array();
//$result = preg_split("/[\s,]+/",$arr);
//print_r($result);
$arr1 = preg_split("/[\s,]+/",$arr1);
for($i=0; $i<count($arr1); $i++) {
if($arr1[$i] == '1' && $arr1[$i+1] == '4-32640')
$arr[count($arr)] = $arr1[$i].$arr1[$i+1];
else {
$arr[count($arr)] = $arr1[$i];
if($arr[$i] == '4-32640')
unset($arr[$i]);
}
}
print_r($arr);
//$result1 = preg_split("/[\s,]+/",$arr1);
//$result2 = preg_split("/[\s,]+/",$arr2);
//print_r($result1);
//print_r($result2);
?>
$arr2 = "FAB3 0 17 11 0 946 144 0 23 QC 65 P 15 1-13613-11437 -458.0MV 0.00A 0.00A 3.6MA 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A 0.00A -502C -502.0MM 0.00M 0.00M 0.00M 0.00M 273.4MM 773.4MM 0.00M 2 0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";问题是出在这两块红色的地方,如果这项数据的值是稳定的,几种值中间选定,把8楼的代码改改就能用了,
如果位置是稳定的,可以保证是13列出问题,请参考6楼的。
如果非要和并,请楼主最好能提供 这两块位置字段的明显的变化规则来。
如果确定为 \d\s*\d+\-\d+ (1 4-32640) 和 \d+\-\d+\-\d+ (1-13613-11437[)
这两种情况的化,可以用正则环视(又叫预判)来解决。
总之想要匹配什么,总要能先把同与不同找出来。 不能光说,我又想按空格来区分,又想不按空间来区分这样的问题,是没有明细化的,我就不知道怎么下手了。