2010-03-21 5 views
2

두 가지 방법 중 하나로 제시하는 소스에서 데이터를 추출해야합니다. 데이터는 다음과 같은 형식의 수 : 복잡한 정규식 질문입니다. 데이터는 괄호 안에 들어갈 수도 있고 그렇지 않을 수도 있습니다.

Francis (Lab) 18,077 (60.05%); Waller (LD) 4,140 (13.75%); Evans (PC) 3,545 (11.78%); Rees-Mogg (C) 3,064 (10.18%); Wright (Veritas) 768 (2.55%); La Vey (Green) 510 (1.69%) 

또는 같은

:

Lab 8,994 (33.00%); C 7,924 (29.07%); LD 5,197 (19.07%); PC 3,818 (14.01%); Others 517 (1.90%); Green 512 (1.88%); UKIP 296 (1.09%) 

I 추출해야 할 데이터는 괄호 안에 하나입니다 비율과 파티 (이 선거 결과이다)이며, (첫 번째 예) 또는 숫자가 아닌 유일한 텍스트입니다.

지금까지 나는이있다 : 그래서

Array 
(
    [0] => Francis (Lab) 18,077 (60.05%) 
    [1] => Francis (Lab) 18,077 
    [2] => 60.05 
) 

내가 비율을 가지고 있지만, 나는 또한 파티 레이블을 필요 나에게 (첫 번째 예) 다음의 일치를주고있다

preg_match('/(.*)\(([^)]*)%\)/', $value, $match); 

괄호 안에있을 수도 있고 없을 수도 있으며, 유일한 텍스트 일 ​​수도 있고 아닐 수도 있습니다. 누구든지 도와 줄 수 있습니까?

+1

세미콜론으로 토큰을 분해하고 각 토큰을 개별적으로 살펴보고 첫 번째 숫자 앞에 괄호를 매칭 ​​한 다음 정규 표현식을 사용하여 필요한 데이터를 분리하지 않는 이유는 무엇입니까? 정규 표현식보다 작업하기가 약간 쉬울 수도 있습니다. – Salty

답변

1

파티 기호에 공백이 있습니까? 그렇지 않은 경우 트릭을 수행해야합니다.

'/\(?([A-Za-z]+)\)?\s*[\d,]+\s*\(([\d.]+%)\)/' 

정규식은 원시 번호와 백분율로 고정됩니다. 파티는 그것들에 선행하는 공백이 아닌 마지막 순서 일 뿐이며 대괄호로 묶이거나 묶이지 않을 수도 있습니다.

+0

+1. 똑같은 일을하고 있었지만'\ s +'를 사용했습니다 :) – Qtax

+0

고마워요. 완벽하게 작동합니다. –

관련 문제