preg_replace函数似乎不起作用

时间:2014-02-19 21:23:48

标签: php function preg-replace

我有以下代码:

<?php
$test = "BEGIN_SESSION 7
1h+ 47
30mn-1h 20
15mn-30mn 16
5mn-15mn 43
2mn-5mn 29
30s-2mn 35
0s-30s 170
END_SESSION";

preg_match("/BEGIN_SESSION(.*)END_SESSION/is", $test, $matches);
$session = $matches[0];
preg_match('/30s-2mn ([0-9]{2})/ms', $session, $matches); 
$a = $matches[1];
preg_match('/0s-30s ([0-9]{3})/ms', $session, $matches); 
$b = $matches[1];
var_dump($session);
$session = preg_replace('/30s-2mn ([0-9]{2})\n0s-30s ([0-9]{3})/ms', "0s-2mn " .   ($a+$b), $session);

var_dump($session);
?>

我希望功能显示$session,如下所示:

"BEGIN_SESSION 7
1h+ 47
30mn-1h 20
15mn-30mn 16
5mn-15mn 43
2mn-5mn 29
0s-2mn 205
END_SESSION"

但相反它不会改变任何东西!我的代码有什么问题?

2 个答案:

答案 0 :(得分:2)

你的正则表达式做了很多假设,这并不好。正则表达式应该不需要假设,但你假设在30s-2mn行中会有两位数字,你假设在0s-30s行中会有三位数,而且大多数情况下,你认为{{1用于分隔新行,而不是\n或行上任意尾随空格。

正则表达式在这里看起来并不合适。我建议改为解析它:

\r\n

答案 1 :(得分:1)

基本PHP语法:

$session = preg_replace('/30s-2mn ([0-9]{2})\n0s-3 etc....');
                                            ^^---
PHP中的{p> \n换行符并未作为换行符' - 单引号字符串。 PHP将其视为字面反斜杠和文字n,而不是换行符。

使用" - 引用的字符串。