我已经搜索了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个已经回到网上。
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 澳大利亚/西部(假名): at Store的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个匹配,所以我需要一些帮助。
答案 0 :(得分:3)
无需foreach
循环:
preg_replace('/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}:\d{2}/m','<strong>$0</strong>', $text);
立即进行所有匹配和替换。
答案 1 :(得分: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;