2011-12-11 4 views
1

나는 이것들과 같이 많은 문자열을 가지고있다 (HTML 것들). 긴 select/option 태그는 다음과 같습니다.PHP :이 문자열을 정규 표현식을 사용하여 연관으로 변환하는 방법은 무엇입니까?

<option value="93">Afghanistan (93)</option> 
<option value="355">Albania (355)</option> 
<option value="213">Algeria (213)</option> 
<option value="376">Andorra (376)</option> 
<option value="244">Angola (244)</option> 
<option value="264">Anguilla (264)</option> 

나는 그래서이 문제를 접근하는 방법을 몰라, 같은 PHP 배열로 내가 PHP에서 정규식에서 일한 적이

array("93"=>"Afghanistan (93)","355"=>"Albania (355)","213"=>"Algeria (213)", ...) 

을이 변환 할 계획입니다. 어떤 데이터/코드를 변환해야합니까?

+1

또한보십시오 : http://stackoverflow.com/a/1732454/78845 – Johnsyweb

+3

나는 당신이 Stackoverflow에 질문하기 전에 RegEx를 배워야한다고 생각합니다. 귀하의 질문은 연구 노력을 보여주지 않습니다. –

+3

@Johnsyweb - StackOverflow는 "regex"및 "html"에 대해 전략적으로 질문 텍스트를 구문 분석해야합니다. 조건이 충족되면 사용자는 게시하기 전에 확인 상자와 함께 리디렉션되어야합니다. – Dan

답변

1

이것은 기본적인 정규 표현식 질문입니다.

preg_match_all('/<option value="([0-9]+)">(.*?)<\/option>/is', $data, $matches); 

$result=array(); 
foreach($matches[1] as $key=>$value){ 
    $result[$value]=$matches[2][$key]; 
} 
var_dump($result); 

난 당신이 이런 일을 위해있는 DOMDocument 클래스를 사용하는 것이 좋습니다 :

preg_match_all("#\"(\d+)\">((\w+) \(\d+\))<#", $data, $m); 
$result = array_combine($m[1], $m[2]); 

는하지만 난 당신이

preg_match_all("#(\d+)\">(\w+)#", $data, $m); 
$result = array_combine($m[1], $m[2]); 
1

사용을 필요가 있다고 생각합니다. http://www.php.net/manual/fr/class.domdocument.php

+0

+1 대신 :'(. *?)'나는보다 구체적인 :'([^ <] + \ (\ 1 \))'을 사용할 것입니다. 정규식은 대상 문자열이 이처럼 매우 구체적 일 때 HTML로 완벽하게 사용할 수 있습니다. – ridgerunner

관련 문제