我有两个字符串,我必须从中提取数据。我使用preg_replace
来执行此操作。但是,我不知道如何制作它,以便最后\s\:\:
可以匹配或不匹配。我尝试了{0,}
,但是它与第一个字符串不匹配,没有它,最后一个字符串不匹配。
$strings = array(
'13.02 - foobar1 bla bla :: 08.03.2013 - 23.12.2013',
'06.05 21:00 - " foobar2 bla bla "',
)
foreach($strings as $data){
$pattern = '/^(\d){2}\.(\d){2}\s?(\d){0,2}(\:)?(\d){0,2}\s\-(.*)(\s\:\:.*)?/i';
echo preg_replace($pattern, '$6', $data);
}
我希望将这两个字符串作为最终输出:
"foobar1 bla bla"
"" foobar2 bla bla ""
答案 0 :(得分:2)
您的代码应该是这样的:
$strings = array(
'13.02 - foobar1 bla bla :: 08.03.2013 - 23.12.2013',
'06.05 21:00 - " foobar2 bla bla "',
);
foreach($strings as $data){
$pattern = '/\d{2}\.\d{2}(?:\s\d{2}:\d{2})?\s-\s(.*?)(?:\s::|$).*/';
echo preg_replace($pattern, '$1', $data) . "\r\n<br>";
}
将输出:
foobar1 bla bla
" foobar2 bla bla "