정규식 대체에서 HTML 태그 무시
정규식은 복잡한 HTML 구문 분석 작업을 처리하기에 충분하지 않은 경우가 많으며, 특히 선택적으로 처리하는 경우에는 더욱 그렇습니다. 태그를 무시합니다. 대신 일반적으로 이러한 시나리오에는 DOMDocument 및 DOMXPath를 사용하는 것이 좋습니다.
DOMXPath 기반 접근 방식
교체를 수행하는 동안 HTML 태그를 무시하려면 DOMXPath를 사용하여 다음을 수행할 수 있습니다. 문서 내에서 텍스트 요소를 선택적으로 찾습니다. 예를 들어, 다음 쿼리는 검색어 "applespan"을 포함하는 모든 텍스트 노드를 찾습니다.
//*[contains(., "apple span")]/*[FALSE = contains(., "apple span")]/..
Creating a TextRange Class
그런 다음 사용자 정의 DOM 텍스트 노드 목록을 나타내기 위해 TextRange 클래스를 만들 수 있습니다. 이 클래스를 사용하면 이러한 텍스트 노드에서 단일 문자열인 것처럼 문자열 작업을 수행할 수 있습니다.
검색 결과 처리
일치하는 각 텍스트 노드 범위에 대해 < ;스팬> 요소를 생성하고 텍스트 노드 주위에 삽입하여 강조 표시할 수 있습니다. 이렇게 하면 HTML 태그에 영향을 주지 않고 원하는 결과를 생성할 수 있습니다.
예
다음은 이 접근 방식을 보여주는 샘플 코드입니다.
$doc = new DOMDocument; $doc->loadXML('<html><body>This is some <span>text</span> that span</body></html>'); $xp = new DOMXPath($doc); $anchor = $doc->getElementsByTagName('body')->item(0); $r = $xp->query('//*[contains(., "span")]/*[FALSE = contains(., "span")]/..', $anchor); foreach($r as $node) { $textNodes = $xp->query('.//child::text()', $node); $range = new TextRange($textNodes); while(FALSE !== $start = strpos($range, "span")) { $base = $range->split($start); $range = $base->split(strlen("span")); foreach($base->getNodes() as $node) { $span = $doc->createElement('span'); $span->setAttribute('class', 'search_hightlight'); $node = $node->parentNode->replaceChild($span, $node); $span->appendChild($node); } } } echo $doc->saveXML(); // Output the modified XML with highlighted text
이 접근 방식 교체 작업 중에 HTML 태그를 강력하고 효율적으로 무시할 수 있어 HTML 구조를 손상시키지 않고 일관된 결과를 보장합니다.
위 내용은 정규식 교체 중에 HTML 태그를 효율적으로 무시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!