我已经在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;