我有一个包含许多日期的大文本,格式如下:
10 april 2012, monday
我需要将它们全部转换成这种格式:
\r\nmonday, 10 april 2012
所以,我写了一个正则表达式,它工作得很好。
$matches1= preg_replace(
'#(\d{,2} [a-z]+) \d{4}, (sunday|monday|tuesday|wednesday|thursday|friday|saturday)#u',
"\r\n$2$3$4$5$6$7$8, $1",
$txt);
问题是我还需要将与替换模式匹配的文本的所有转换部分 - "\r\n$2$3$4$5$6$7$8, $1" (如 \r\nmonday, 10 april 2012) - 保存到大批。所以我有这样的事情:
Array('\r\nmonday, 10 april 2012', '\r\ntuesday, 11 april 2012', '\r\nfriday, 14 april 2012' etc.)
那可能吗?
替换模式 ("\r\n$2$3$4$5$6$7$8, $1") 来自 html 表单,可能会有所不同。
更新
我试图写一个回调函数,但我无法得到我需要的结果。所以我想出了以下几点:
$text = ...;//some text
$search = ...;//search pattern
$replacement = ...;//replacement pattern
preg_match_all('#' . $search. '#u', $text, $matches, PREG_SET_ORDER);
foreach ($matches as $match)
{
$replacements[] = preg_replace('#' . $search. '#u', $replacement, $match[0]);
}
$newtext = preg_replace('#' . $search. '#u', $replacement, $text);
所以 $newtext 包含转换后的文本, $replacenemts 包含所有替换。