【Ruby】 HTML 태그를 나타내는 정규 표현과 `gsub` 메소드 내에서의 활용 예

소개



요 전날 【Ruby】HTTPClient와 LINE Notify를 사용하여 터미널에서 문자열을 보내는 프로그램이라는 기사를 썼습니다.

그 중에서 사용하고 있는 HTTPClient 의 학습중에 <div> 이나 </div> 등 HTML 태그를 나타내는 정규 표현을 보고 「편리하다!」라고 느꼈기 때문에 정리했습니다!

누군가의 참고가 되면 다행입니다.

이 기사가 도움이 되는 분


  • HTML 태그를 방해하고 제거하고 싶습니다
  • 정규식 초보자

  • 이 기사의 장점


  • HTML 태그를 나타내는 정규 표현식을 이해하고 활용할 수 있습니다
  • 그런 다음 Ruby의 gsub 메서드 사용법을 알 수 있습니다

  • 환경


  • 쉘: zsh
  • Ruby 2.6.3

  • 참고로 한 사이트


    HTTPClient 튜토리얼 사이트에서.get_content 메소드의 사용 예 중에서 발견되었습니다.

    이하 링크의 「The get_content function」안에 써 있던 것입니다.
    Ruby HTTPClient tutorial (영어)

    HTML 태그를 나타내는 정규식



    여기가 HTML 태그를 나타내는 정규식입니다.
    %r{</?[^>]+?>}
    

    이 코드를 순서대로 읽어 갑니다.

    ↓참조한 레퍼런스는 이쪽
    정규식 (Ruby 2.6.0)

    %r{정규 표현식}


    {} 안은 / 등을 이스케이프하여 기술할 필요가 없다.

    HTML 태그는 닫는 태그에.

    /



    그대로 /正規表現/ 를 나타낸다.

    %r{}


    < 가 1개인가, 없는가?

    <


    /? 를 붙인 문자는 제외된다.
    즉, / 이외의 1 문자를 나타냅니다.

    「^>」


    ^ 는 직전에 쓴 패턴이 「1개 이상」이라고 하는 의미입니다.
    > 이외의 문자가 1개 이상이라고 하는 것이군요.

    ※2019/11/15 추가
    이 기법은 「최소량 지정자(reluctant quantifier)」라고 하고, 매치가 성공하는, 최단의 캐릭터 라인에 매치 합니다.
    이번 HTML 태그를 나타내는 케이스에서는 [^>]+? 라고 해도 같은 거동을 나타냅니다.
    @scivola 씨, 항상 감사합니다!

    (다시 한 번) +?



    "> 부터 시작하여 [^>]+ 가 있거나 없어도 좋고, 마지막 %r{</?[^>]+?>} 까지의 사이에 < 이외의 문자가 몇개 있다"
    그렇습니다.

    즉, / 인가 > 라고 하는 것!
    바로 HTML 태그입니다.

    【활용 예】 > 메소드로 HTML 태그를 제거한다


    (何らかのHTML).gsub(%r{</?[^>]+?>},'')
    

    Ruby에서 <任意の文字列> 메서드는 문자열을 대체하는 메서드입니다.

    위 코드에서</任意の文字列> 또는 gsubgsub로 바꾸기(삭제)
    하고 있습니다.

    예를 들어 HTML 문서에서 HTML 태그를 제거하여 가독성을 향상시키는 데 사용할 수 있습니다. (이하 참조)

    【Before】
    <html><head><title>Something.</title></head>
    <body>Something.</body>
    </html>
    

    【After】
    Something. # <title>タグ内のもの
    Something. # <body>タグ内のもの
    

    결론



    정규 표현은 확실히 봐도 모르겠지만, 읽어 풀면 반드시 아는 것이 좋네요.

    자주 사용할 것 같은 정규 표현을 리스트화해 두고, 필요에 따라서 참조할 수 있도록 해 두면 작업 효율 올라갈 것 같다.

    참고로 한 사이트 (항상 감사합니다)



    Ruby HTTPClient tutorial

    좋은 웹페이지 즐겨찾기