2013-04-29 2 views
-1
for ($i=1; $i<=100; $i++) { 
    $i++;  
    $word1 = '"'; 
    $word2 = '"'; 
    preg_match('/'.preg_quote($word1).'(.*?)'.preg_quote($word2).'/is', $html, $match); 
    echo $match[1]."<br>"; 
    $main = explode('"',$html); 
    $html = $main[1]; 
    //echo $main[1]; 
} 

이것은 현재 사용중인 코드입니다. 그러나 작동하지 않습니다. 내가하고 싶은 것은 ".link"텍스트 "또는 링크 src =" "src를 얻는 것입니다. 나는 쉽게 얻을 수 있습니다."그러나 어떻게 모든 일치하는 단어를 얻을 수 있습니까? 이 작업을 수행하는 함수를 만들고 싶습니다. Get_Text ($ result_array, $ start_tag, $ end_tag, $ html); 여기서 $ result_array는 결과이고 $ start_tag는 단어 링크 src = "를 시작하고 $ end_tag는"like word like "를 시작합니다.두 단어 사이에서 여러 번 가져 오기

워드 1가 (SRC = ")

워드 2가 (") 지금

html is (bla bla bla <iframe src="http://website.domain"></iframe> bla bla bla <embed src="url"></embed>) 

결과 $ 결과되어야합니다 :와 $ html로 내가 EDIT를 검색 할 텍스트입니다 [1] = "http://website.domain"; $이 발생할 [2] = "URL"

+3

regexp를 사용하여 HTML을 구문 분석하지 마십시오. DOM 파서를 사용하십시오. – Barmar

+0

'preg_match_all()'은 당신이 원하는 것을 처리합니까? 그래서 루프를 작성할 필요가 없습니까? – Barmar

+0

예. 예를 들어 주시겠습니까? –

답변

1
function get_text_between ($start, $end, $string) { 
    $start = preg_quote($start); 
    $end = preg_quote($end); 
    preg_match_all("/$start(.*?)$end/is", $string, $match); 
    return $match[1]; 
} 

$result = get_text_between('src="', '"', 'bla bla bla <iframe src="http://website.domain"></iframe> bla bla bla <embed src="url"></embed>'); 
print_r($result); 

출력 :

Array 
(
    [0] => http://website.domain 
    [1] => url 
) 

그러나, HTML을 구문 분석하는 정규 표현식을 사용하는 것은 일반적으로 좋은 생각입니다. HTML에 src= 사이의 공백이 있거나 HTML이 큰 따옴표 대신 작은 따옴표를 사용하는 경우에는 작동하지 않습니다. DOM 파서 라이브러리를 사용해야하며 PHP에는 그 중 몇 가지가 있습니다.

+0

감사합니다, 당신은 awsome입니다. –

관련 문제