PHP, preg_match, 정규 표현식. 내가 뭘 잘못하고 있죠?
-
19-09-2019 - |
문제
내가 일치시키고 싶은 패턴은 다음과 같습니다.
<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>
제휴하지 않습니다 StackOverflow