2012-09-19 3 views
-3

,어떻게 preg_match를 사용하여 문자열 (PHP)에서 데이터를 추출합니까? 내가 문자열을

DXD ROSMITH JOHN 094 5251 907 REQ 008313 M 

나는 공백의 알 수없는 양, 5-15 자리가있을 수 있습니다 전화 번호를 추출하려합니다. 또한 마지막 편지 (성)와 이름이 필요합니다.

그렇게 할 수있는 정확한 pattren은 무엇인가?

+0

당신이 자신을 뭔가를 시도? 이 데이터 형식에 대한 사양을 볼 수 없다면 일반적인 대답은 없습니다. 이 특정 텍스트 샘플에 대한 특정 정규 표현식을 쉽게 제공 할 수 있지만 텍스트가 변경 될 것으로 예상하므로 실제 상황에 맞는 답이 될 수도 있고 아닐 수도 있습니다. – deceze

+0

나는 몇 가지를 직접 시도했지만, PHP로 새로운 것을 시작한 이래로 나는 모두 실패했다. 나는 무엇을하려고하는지가 c에서 가능하다는 것을 안다. 데이터 형식이 매우 일정하다 : [단어, 공백, [워드, 공백, [수] 공백 [명 (몇 공백을 포함 할 수있다)], 공백, [전화 번호 (공백을 포함 할 수있다)], whiespace , [단어], 공백, [숫자], 공백, [char] – Roy

답변

0
$subject = "DXD ROSMITH JOHN 094 5251 907 REQ 008313 M"; 
$pattern = "/[a-z]+\s+[a-z]+\s+\d+\s+[^\d]+\s*(\d+\s*\d+\s*\d+)\s+[a-z\-]+\s+\d+\s+([a-z])/i"; 

preg_match($pattern, $subject, $matches); 

$ matches [1]에 전화 번호가 포함되어 있고 $ matches [2]에 성이 들어 있습니다. 이를 위해

, 나는 열 1,2,4,5 9 만 문자를 포함하고 3,6,7,8,10 단지 숫자 (성 편지이어야한다) 가정. 만약 숫자뿐만 아니라 문자가 해야하는 경우

그러나, 단지 \ S 공백이다 (각 열의 [A-Z0-9]와 D \ [아리조나] 또는 대체)

+0

이 정규식은 너무 구체적입니다. * 나는 그것을 약간 수정 한 – deceze

+0

... * "공백의 알 수없는 양의 5 ~ 15 자리 숫자를 할 수도 있습니다", 그래서 사양에 맞는. '-'9 열 단어에입니다 '-'특수 문자 블라드 많이 감사 – Vlad

+0

들으, 그것은 문자와 단어를 가지고있는 사람들 exept, 사례의 99 %에서 작동? – Roy

0

전화를 들어 당신이 시도 할 수 :

$subject = "DXD ROSMITH JOHN 094 5251 907 REQ 008313 M"; 
preg_match_all("/([0-9]|\s).+{5,15}(\s)/si", $subjectt, $matches); 
관련 문제