3

我已经在 Stackoverflow 上搜索了一些答案,并尝试了许多方法来使这项工作没有成功。所以我希望那里的一些天才能够帮助我。

我正在从包含日期/时间 ( dd/mm/yy hh:mm:ss) 的数据库中检索文本,我想将正则表达式以这种格式找到日期的所有实例加粗。

例如:

09/09/2013 16:42:01 澳大利亚/西部(假名):

09/09/2013 15:44:01(警报)警报阶段 2

2013 年 9 月 9 日 15:38:55 澳大利亚/西部(假名):at Store 中有 2 家重新上线。

2013 年 9 月 9 日 15:33:17 澳大利亚/西部(假名):商店的所有 3. 加载都有问题。正在调查。

09/09/2013 15:30:02 澳大利亚/西部(假名):

看起来像这样:

09/09/2013 16:42:01澳大利亚/西部(假名):

09/09/2013 15:44:01(警报)警报阶段 2

2013 年 9 月 9 日 15:38:55澳大利亚/西部(假名):at Store 中有 2 家重新上线。

2013 年 9 月 9 日 15:33:17澳大利亚/西部(假名):商店的所有 3. 加载都有问题。正在调查。

09/09/2013 15:30:02澳大利亚/西部(假名):

我已将此正则表达式用于日期/时间:

preg_match_all('/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/',$text,$matches);

使用此代码:

foreach ($matches as $res) 
{
    $replaceStr = "<strong>" . $res . "</strong>";
    str_replace($res, $replaceStr, $text);
}

但似乎只能在文本中找到 1 个匹配项,所以我需要一点帮助。

4

2 回答 2

3

不需要foreach循环:

preg_replace('/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/m','<strong>$0</strong>', $text);

一次完成所有匹配和替换。

于 2013-09-17T05:26:20.343 回答
0

您应该使用修饰符“m”,因此 preg_match_all 现在可以与多行文本一起使用:

$text = "09/09/2013 16:42:01 Australia/West (Fake Name):

09/09/2013 15:44:01 (alert) alert stage 2

09/09/2013 15:38:55 Australia/West (Fake Name): 2 of the at Store have come back online.

09/09/2013 15:33:17 Australia/West (Fake Name): Store is having issues with their all 3. loading\". Investigating.

09/09/2013 15:30:02 Australia/West (Fake Name):";

preg_match_all('/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/m',$text,$matches);

foreach ($matches[0] as $res) 
  {
    $replaceStr = "<strong>" . $res . "</strong>";
    $text = str_replace($res, $replaceStr, $text);
  }

print $text;
于 2013-09-17T05:30:06.067 回答