1

系统消息可能包括以下状态语句:

该函数执行了312次,最常被进程Urbanus使用:16.06.2012 14:10

句子总是在一行中。

我需要:

  1. 检索三个粗体部分:
    • 1 到 n 之间的整数(此处:312)
    • 由字符、符号(包括空格但不包括换行符)和数字组成的字符串(此处:Urbanus)
    • “今天”或“昨天”的日期或 DD.MM.YYYY 中的日期(此处:16.06.2012)
    • 24 小时 hh:mm 格式的时间(此处:14:10)
  2. 从系统消息中删除整个句子。

我尝试了以下方法,但它不起作用:

$matches = preg_replace(
"/This function was executed ([1-9]|[1-9][0-9]|[1-9][0-9][0-9]) times, most often used by process (.+?): ((Today|Yesterday|[0-9]{2}.[0-9]{2}.[0-9]{4}) ([0-9]{2}:[0-9]{2}))./iU", 
"", 
$message);
4

1 回答 1

1

1部分:

尝试使用preg_match_all. 我也改进了你的模式

$message = 'This function was executed 312 times, most often used by process Urbanus: 16.06.2012 14:10.';

$matches = array();
if (preg_match_all("/This function was executed ([1-9]|[1-9][0-9]+) times, most often used by process (\w+?): ((Today|Yesterday|[0-9]{2}.[0-9]{2}.[0-9]{4}) ([0-9]{2}:[0-9]{2}))./i", $message, $matches)) {
    var_dump($matches);
}
于 2012-11-23T12:50:52.987 回答