2011-09-15 4 views
0

모든 html 문자열에서 모든 빈 앵커 태그를 찾는 정규식을 찾고 있습니다. "비어 있음"은 자체 또는 그 하위 노드에 텍스트 노드가 없음을 의미합니다. 예를 들어빈 앵커 태그를 찾는 정규식

는, 이러한 발견해야합니다

<p>abc<a href="http://foo.com"></a>def</p> 
<p>abc<a href="http://foo.com"><span></span></a>def</p> 
<p>abc<a href="http://foo.com"><span><b></b></span></a>def</p> 

그리고이 없습니다 :

<p>abc<a href="http://foo.com">Some text</a>def</p> 
<p>abc<a href="http://foo.com"><span></span></a>def</p> 
<p>abc<a href="http://foo.com">Some<span><b>Text</b></span></a>def</p> 

정규식은 POSIX 호환되어야합니다 (I MySQL을 위해 필요).

왜? 도움이되는 커스텀 regex_replace 함수를 사용하여 mysql 테이블 컬럼 (순수한 MySQL 사용)에서 빈 앵커를 제거해야하고 솔직하게 이것을 달성하기위한 더 좋은 방법을 모른다. MySQL UpdateXML은 한 번에 여러 개의 일치 항목에 대해 작동하지 않습니다.

+6

[정규식을 사용하여 HTML을 구문 분석하면 안됩니다.] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Bohemian

+0

html 코드가 포함 된 필드가있는 mysql 테이블을 조회해야하며 빈 앵커를 순수 MySQL로 바꿔야합니다. 다른 방법을 아십니까? – acme

+0

regexes로 HTML을 구문 분석하면 슬픔으로 이어질 것입니다. –

답변

-1

대답은에서 작동이 패턴을 사용하려면 :하지에. Parsing HTML with regex is bad 대신에 PHPs SimpleXML 클래스의 조합을 사용하여 DOM 트리를 탐색합니다.

+0

그럼 왜 downvoter하시기 바랍니다 설명해 주시겠습니까? – acme

0

이 작동합니다 :

/<a href=.*?><\/a>/ 
+0

POSIX regexes가 게으른 검색을 지원한다고 생각하지 않습니다. 보십시오 [^>] * – xanatos

+0

다른 빈 태그가있는 빈 태그가 아닌 빈 태그를 찾는 경우에만 작동합니다 (위 내 게시물의 예제 참조). – acme

0

시도가 당신의 상태

<[^/>]+>[ \n\r\t]*</[^>]+> 
관련 문제