2012-05-11 3 views
0

나는이 같은 문자열이 : 실제 데이터 아니다정규식은

Name: John Doe 

Age: 23 

Primary Language: English 

Description: This is a multiline 
description field that I want 
to capture 

Country: Canada 

,하지만 당신은 내가 할 노력하고있어 볼 수 있습니다. 정규식을 사용하여 "키"필드 (이름, 나이, 기본 언어, 설명, 국가) 및 해당 값의 배열을 가져 오려고합니다.

나는 PHP를 사용하고 있습니다.

나의 현재 시도이다,하지만 작동하지 않습니다

preg_match('/^(.*?\:) (.*?)(\n.*?\:)/ism', $text, $matches); 
+0

\ n하지만 수정자는 모든 개행이 새 문자열이라고 말합니다. 그리고 . 또한 일치합니다 \ n –

+0

사용자가 데이터를 채웠다 고 가정합니다. 데이터가'$ _POST' 또는 데이터베이스에서 오는가? – Biotox

답변

1

여기에 하나 개의 솔루션입니다.

\s*([^:]+?)\s*:\s*(.*(?:\s*(?!.*:).*)*)\s* 

부정적인 표제 어설 션 (?!.*:)을 사용했습니다. 이것은 다음 줄이 이 아니며이 새 필드처럼 보이고 동시에 중단 한 곳에서 계속되는지 확인할 수있는 유일한 방법입니다. (이 때문에 lookaheads와 lookbehinds는 어설 션 어설 션으로 알려져 있습니다.)

EDIT : 임의 폭 미리보기에 대한 비트가 제거되었습니다. 나는 틀렸다. 위의 해결책은 괜찮습니다.