2013-09-25 5 views
0

데이터를 추출해야하는 두 개의 문자열이 있습니다. 이 작업을 수행하려면 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

현재 코드가 제대로 작동하고 두 문자열을 모두 일치시킵니다. [this] (http://codepad.org/h0ofNAuO)를 확인하십시오. 그러나'$ strings'의 선언에서';'가 누락되었습니다. –

+0

첫 번째 문자열의 경우 ":: 08.03.2013 - 23.12.2013"부분을 제거해야합니다. – WraithLux

+0

입력 예제와 정확한 예상 출력을 사용하면 많은 도움이됩니다. – Enissay

답변

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 " 
+0

Thanks. 이전에 하위 패턴 구문을 알지 못했습니다. – WraithLux