문제

링크를 제외한 모든 HTML을 제거하는 정규식을 작성하려고 합니다( <a href 그리고 </a> 태그를 각각 지정합니다.100% 안전할 필요는 없습니다(이미 승인되어 게시된 콘텐츠를 구문 분석하고 있으므로 주입 공격이나 기타 걱정하지 않습니다). SWF 영화).

내가 사용하고 있는 원래 "스트립 태그" 정규식은 다음과 같습니다. <(.|\n)+?>, 나는 그것을 다음과 같이 수정하려고했습니다. <([^a]|\n)+?>, 하지만 이는 물론 다음이 있는 모든 태그를 허용합니다. 처음에 공백이 있는 것이 아니라 그 안에 공백이 있습니다.

별로 중요한 것은 아니지만 누군가가 알고 싶어할 경우를 대비해 내가 이 글을 쓰고 있습니다. 액션스크립트 3.0 한 동안 플래시 영화.

도움이 되었습니까?

해결책

<(?!\/?a(?=>|\s.*>))\/?.*?>

이 시도.p 태그와 비슷한 것이 있습니다.그들을 위해 일했는데 왜 안되는지 모르겠습니다.부정 예측을 사용하여 (긍정 예측 사용) a(선택적 / 접두사 사용) 뒤에 > 또는 공백, 항목 및 >가 오는(선택적 / 문자 접두사)와 일치하지 않는지 확인합니다.그러면 다음 > 문자까지 일치합니다.이것을 대체물에 넣으십시오.

s/<(?!\/?a(?=>|\s.*>))\/?.*?>//g;

이렇게 하면 태그를 열고 닫는 부분만 남게 됩니다.

다른 팁

계속 얘기하고 있는데 추천할 방법이 없네요 정규식 너무 자주.이런 종류의 것들을 테스트하는 것은 환상적입니다.

일반적으로 이 접근 방식에는 문제가 있습니다.정규식은 '단순한' 텍스트 일치에 가장 적합합니다. 중첩된 데이터는 정규식 엔진을 설계되지 않은 영역으로 푸시합니다.일반 HTML 구문 분석에는 정규식 엔진이 아닌 구문 분석기가 필요합니다(전체 기술 세부 정보를 원하는 경우 일반 언어와 문맥 없는 언어의 차이점을 Google에서 확인하세요).

/</ 및 />/를 빈 문자열이나 해당 엔터티로 대체하여 모든 태그를 제거하는 것은 쉽지만 정규 표현식을 사용하여 HTML을 선택적으로 필터링하면 광범위한 우발적이거나 악의적인 입력으로 인해 문제가 발생할 수 있습니다.

여기 있습니다:

{<(?!i|b|h[1-6]|/i|/b|/h[1-6][\s|>|/])[^>]*>}

어때?

<[^a](.|\n)+?>

?

strip_tags() 이것을 한다.

여기에는 모두 포함됩니다. <a><p><font><b><i><sup> 태그 및 정리된 버전 출력:

cat input.htm | tr -d '\n' | php -r '$input=fgets(STDIN); echo strip_tags($input,"<a><p><font><b><i><sup>");' | tidy -i -wrap 0 -o output.htm
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top