일부 HTML 태그의 경우 간단하게 string.Replace
을 사용할 수 있습니다. BBCode는 여러 가지면에서 단지 1 : 1, tag-for-tag 매핑인데, 예를 들어 <b>
과 </b>
은 각각 [B]
및 [/B]
으로 매핑됩니다. 정말 죽은 - 간단한 HTML의 경우
html.Replace("<b>", "[b]").Replace("</b>", "[/b]")
, 당신은이 태그별로 태그를하는 성능에 미치는 영향 및 코드 추함 마음을 그것을하지 않습니다 그래서 그냥 쉽게 달성입니다. 결과로 나오는 BBCode를 웹 페이지에 어딘가에 표시하려는 경우 크로스 사이트 스크립팅 취약점에주의하십시오. 이것은 위생 처리를 위해 충분히 가까이 있지 않습니다.
그러나 정규식을 사용하여 HTML을 삭제하고 모든 태그를 자동으로 대체하는 데 신경 쓰지 마십시오. 예를 들어 <img>
태그는 HTML과 BBCode가 완전히 다릅니다. HTML에서는 <img src="..."/>
(후행 슬래시는 선택 사항)이고 BBCode에서는 [IMG]...[/IMG]
입니다. 정규식으로 이것을하는 것은 ... 글쎄, 그냥 차선 이하라고 말하자.
정규 표현식은 일반 언어 용으로 설계되었으며 HTML은 일반 언어가 아니며 문맥 자유형 언어입니다. 실제로는 HTML Agility Pack과 같은 HTML 파서를 사용하는 것이 좋습니다. 그런 다음 DOM 트리를 내리고 원하는 요소를 허용 목록에 추가하고 원하는대로 BBCode 또는 다른 것으로 매핑 할 수 있습니다.
[당신은 정규 표현식을 사용하여 HTML을 구문 분석 할 수 없습니다!] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-입니다 포함 된 태그) – SLaks
나는이 게시물을 읽었습니다, 알아요. 그러나. 사용자 입력이 있습니다. 사용자는 보통 형식으로 programm html에 입력합니다. 나는 사용자 입력 형식을 만든다. 나는 당신이 나를 이해하기를 바랍니다. =) – Dmitriy
당신은 여전히 DOM 조작 라이브러리를 사용하여 사용자 입력을 처리 할 수 있습니다. 그리고 HTML에서 BBCode로 무손실로 변환하는 것은 불가능합니다. 왜냐하면 후자는 전자가하는 모든 것을 지원하지 않기 때문입니다. –