deprecated/코로나 알림(project-ios)

String HTMLTag 지우기 (정규표현식)

lgvv 2021. 7. 29. 12:25

(init) 2021. 7. 29. 12:25 

(update 2023. 04. 18 00:50

 - 정규표현식 완성.

 

정규표현식을 완성했습니다.

이 포스팅을 또 다시 작성할 줄은 몰랐습니다.

포스팅을 작성하게 된 이유는 구글링을 통해 찾은 코드에서 크래시가 발생했기 때문입니다.

 

아래는 html태그를 해 작성했던 코드이지만 

<b>아주 폭신한 아기 고양이</b> <b>파피용 고양이 병원에 가다</b> 글, 그림 A.N. 강 옮김 김애나 솜털처럼 날아다니는 <b>고양이</b> <b>파피용</b>이 기분이 안 좋았어요 무슨 일이 생긴게 틀림 없어요! 한 밤 중 <b>병원</b>으로 가서 하룻밤...

위의 케이스를 제거하지 못하고 일부 경우에는 크래시가 발생합니다.

❌ 아래 코드는 사용하지 말기

extension String { 
	/// String에서 html 태그를 모두 제거합니다.
    public var removeHTMLTag: String {
        guard let encodedData = self.data(using: .utf8) else {
            return self
        }
        
        let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
            .documentType: NSAttributedString.DocumentType.html,
            .characterEncoding: String.Encoding.utf8.rawValue
        ]
        
        do {
            let attributed = try NSAttributedString(data: encodedData,
                                                    options: options,
                                                    documentAttributes: nil)
            return attributed.string
        } catch {
            return self
        }
    }
}

 

그렇다면 어떻게해야할까요?

✅ 아래 코드는 사용하지 말기

extension String { 
	var escapingHTML: String {
        let patten = "<[^>]+>|&quot;|<b>|</b>" // 필요한 패턴을 |(or기호)와 함꼐 추가하기
        
        return self.replacingOccurrences(of: patten,
                                  with: "",
                                  options: .regularExpression,
                                  range: nil)
    }
}

 

위의 방법대로 수행하면 올바르게 처리할 수 있습니다.

 

 

과거 포스팅

✅ 이번시간에는 정규표현식을 이용하여 html 태그를 지우는 방법에 대해서 알아보자.

 

네이버 검색 API를 통해 데이터를 받아왔는데, 받고 보니까 html 태그가 섞여 있어서 도저히 그냥 쓸 수가 없었다...

그래서 나는 HTML태그를 지워야 했는데, 어떻게 적용시켰는지 한번 볼까?

 

(목차)
1. 정규표현식을 이용해 html 태그를 지우는 코드

2. 정규표현식을 확인하는 사이트를 통해 알아보자

3. 예시코드

 

✅ 1. 정규표현식을 이용해 html 태그를 지우는 코드

.replacingOccurrences(of: "<[^>]+>|&quot;",
                      with: "", 
                      options: .regularExpression, 
                      range: nil)

앞에 "<[^>]+>" 이 부분이 html 태그를 지우는 부분이고 &quot; 이 부분이 정규표현식을 통해 걸러지지 않는 부분을 또 한번 걸러낸 코드이다.

 

 

✅ 2. 정규표현식을 확인하는 사이트를 통해 알아보자

https://www.regexpal.com/

 

Regex Tester - Javascript, PCRE, PHP

RegexPal requires a modern browser. Please update your browser to the latest version and try again.

www.regexpal.com

여기 사이트에 들어가서 내가 만든 정규 표현식이 잘 적용되는지 확인할 수 있다.

결과

우리가 작성한 정규표현식이 정상적으로 적용되는 것을 확인할 수 있다.

 

✅ 3. 예시코드

내 블로그의 최고 장점은 무조건 예시코드를 두어서 사용자가 복붙해서 바로 확인해볼 수 있는 것이니까 그럼 예시코드를 한번 만들어 볼까?

let htmlString = """
    <p>p</p>
    <h1>h-1<\h1>
    &quot;
"""
htmlString.replacingOccurrences(of: "<[^>]+>|&quot;",
                                with: "", 
                                options: .regularExpression, 
                                range: nil)
                                
                                
// 결과값
ph-1

 

 

정규표현식은 파이썬으로 코딩테스트를 준비할 때 급급하게 사용했던 것인데, 문자열을 대하겠다면 깊게 공부해보는 것이 중요하겠다.

 

 

html 정규 표현식 : /<[^>]*>?/g