2012-09-05 2 views
2

.. 내가 이것에 대해 올바른 길을 가고 있지만, 여기 간다되지 않을 수 있습니다 좋아 PHP의 preg_replace이다 앰퍼샌드

나는 링크를 취하고 태그 사이의 텍스트를 추출하고이 문자열을 가지고 ...

$string = $item; 
$pattern = '/\<a([^>]*)\>([^<]*)\<\/a\>/i'; 
$replacement = '$2'; 
$message = preg_replace($pattern, $replacement, $string); 

앰퍼샌드 (텍스트 부분에는 태그 부분이 아닌)가있는이 문자열에는 몇 가지 항목이 있지만 대부분은 그렇지 않습니다. 앰퍼샌드를 현재 패턴에 통합하거나 에 다른 preg_replace를 사용하여 태그가 스트라이핑 된 후 앰퍼샌드를 제거하는 방법을 알아 내려고합니다.

고맙습니다!

+0

여러 정규 표현식에 대해 생각해 보면, 과장되어 있거나, [Cthulu] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-)의 노예입니다. except-xhtml-self-contained-tags/1732454 # 1732454) ... 정말로 : 많은 어려움과 _PARSE_ html을 저장하십시오. 당신이 말했듯이 : 당신은 올바른 방향으로 나아 가지 않으므로 자신의 방식을 고쳐야합니다. –

답변

2

앰퍼샌드 이후의 모든 항목을 제거 하시겠습니까? 그런 다음

'/\<a([^>]*)\>([^<&]*)[^<]*\<\/a\>/i'; 

그렇지 않으면 두 번째 작업이 필요합니다.

BTW : 정규 표현식은 <a으로 시작하는 <author> 또는 <audio> 태그와 같은 다른 태그와도 일치합니다.

+0

감사합니다. 링크 만 포함 된 배열을 대체하기 때문에 <큰 문제는 아니지만, 머리를 가져 주셔서 감사합니다! –

6

는 HTML 입력에서 태그를 제거하려는 경우 귀하의 의견은 다음

$text = '<a href="google.com">Text</a>'; 

strip_tags($text) 생산하는 것 인 경우, 또한 예를 들어 strip_tags

있다, 또한 항상 $message = str_replace('&', '', $message);

있다 Text.

+1

대답 해 주셔서 감사합니다! 나는 조금 더 깨끗한 이래로 다른 대답을 선택했다. 하지만 다음 번에는'strip_tags ($ text)'를 염두에 두겠습니다! 감사! –