2012-07-31 2 views

답변

3

정규식에서 단일 행 모드를 켜야하는 것처럼 보입니다. -s 플래그를 추가하여 수정하십시오.

preg_match('/<div class="description">(.*)<\/div>/si', $file_string, $descr); 

단일 회선 모드에서. 문자를 사용하여 개행 문자를 찾습니다. 이 태그가 없으면 *. 개행 태그와 개행 태그 사이에있는 개행 문자와 일치하지 않습니다.

+0

답변 해 주셔서 감사합니다. 아무런 차이가없는 것으로 보입니다. –

+0

단일 행 모드에 대한 설명이 잘못되었습니다. 기본적으로'.'는 줄 분리 기호 문자와 일치하지 않지만 단 일행 모드를 켜면 모든 것이 일치합니다. 행 분리 기호로 간주되는 것은 정규 표현식 및 설정에 따라 다르지만 항상 줄 바꿈 문자 ('\ n', LF)를 포함합니다. (일부 맛은 단선 대신 DOTALL 모드라고 부릅니다. IMO가 훨씬 좋습니다.) –

+0

Alan, 당신은 틀림 없습니다. 오해하지 않도록 내 대답을 업데이트했습니다. – kingcoyote

1

내가 HTML 문서에서 임의의 조각을 추출하는 DOMDocument 클래스와 xpath를 사용하는 것이 좋습니다, 정규 표현식 기반 솔루션 (등, 이상한 장소에서 추가 속성, 공백 추가) 입력 변경에 꽤 취성 그것은 더 복잡한에 대한 읽을 수 있어요 시나리오.

$html = '<html><body><div class="description"><p>some text here</p></div></body></html>'; 
// or you could fetch external sites 
// $html = file_get_contents('http://example.com'); 

$doc = new DOMDocument(); 
// prevent parsing errors (frequent with HTML) 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); 
// enable back parsing errors as the HTML document is already parsed and stored in $doc 
libxml_use_internal_errors(false); 
$xpath = new DOMXpath($doc); 

foreach ($xpath->query('//div[@class="description"]') as $el) { 
    var_dump($el->textContent); 
} 
+0

URL에 사용할 올바른 코드는 무엇입니까? –

+0

'loadHTML'에 대한 입력 문자열을 어디에서 얻을 수 있는지는 중요하지 않습니다. 평소와 같이'curl '또는'file_get_contents '를 사용할 수 있습니다. 조작 된 HTML을로드하려고 시도합니다 (경고를 생성 할 수도 있음) – complex857

관련 문제