문제

내가 일치시키고 싶은 패턴은 다음과 같습니다.

<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">

이것이 제가하는 일입니다.

$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';

preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);

print_r($matches);

인쇄 :

배열 ()

도움이 되었습니까?

해결책

일반적으로 정규 표현은 HTML을 구문 분석하는 데 실제로 열악한 수단입니다. 그들은 신뢰할 수없고 결국 복잡해지는 경향이 있습니다. 훨씬 더 강력한 솔루션은 HTML 파서를 사용하는 것입니다. 보다 PHP 및 DOM으로 HTML을 구문 분석하십시오.

당신의 표현에 관해서는, 나는 보이지 않습니다 <div class="productTitle" 소스의 어느 곳에서나 거기서 시작할 것입니다. 마찬가지로 URL을 구문 분석하려고하지만 앵커 태그 (직접 또는 충분한 와일드 카드를 통해)에 대한 언급은 없으므로 실패 할 수 있습니다. 기본적으로 그 표현은 구문 분석하려는 HTML과 같은 것으로 보이지 않습니다.

다른 팁

... 아니면 이거:

preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);

그것을 다듬습니다.

패턴:

/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m

링크와 텍스트를 대략 얻을 수 있지만 DOM 라이브러리를 사용하는 것이 훨씬 더 나은 방법입니다.

당신은 이것을 시도 할 수 있습니다 :

<a href=".*?">([\s\S]*?)</a>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top