在文本中查找并替换日期/时间并将其设置为粗体


Find and replace Date/Time within Text and make it Bold

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

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

例如:

09/

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

09

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

09

/09/2013 15:38:55 澳大利亚/西部(假名):2 家 at Store 已重新上线。

09

/09/2013 15:33:17 澳大利亚/西部(假名):商店有问题与他们的所有 3. 加载"。调查。

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

看起来像这样:

09/

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

09

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

09/09/2013 15:38:55 澳大利亚/西部(假名): 其中 2 家商店已重新上线。

09

/09/2013 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 个匹配项,所以我需要一点帮助。

不需要foreach循环:

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

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

你应该使用修饰符"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;