리스트패턴구하기 > 그누게시판파서 도움말

본문 바로가기
사이트 내 전체검색

패턴 리스트패턴구하기

페이지 정보

작성자 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 686회 작성일 17-10-08 23:24

본문

리스트패턴구하기              


파싱하고자 하는 모든 게시판은 패턴이 서로 다르다는 가정하에서 시작하는 것이 좋습니다.

같은 그누보드라도 사용자에 따라 커스터마이징이 됐을 수 있기 때문이죠.



여기에서는 실제 잘 작동되고 있는 타겟리스트의 리스트패턴을 가지고 설명드리겠습니다.

실제 적용하실 때도 여기서 설명하는 대로 적용하셔야 합니다.

그렇지 않고 다른 곳에서 설명하는 방식으로 작성하시면 작동되지 않습니다.


이건 패턴을 좀 더 쉽게 작성하시게 할 목적으로 그러니 양해 바랍니다.


<리스트패턴>

 #<td\sclass=\"tdnum\">\d+</td>\s+<td\sclass=\"tdsub\s(?:new|old)\"><a\shref=\"(?P<links>[^\"]+)\"[^>]+>(?P<subjects>[^<]+)<#isU




1. 먼저 리스트패턴에서는 게시판의 리스트들에서 각각의 뷰페이지링크와  

    제목을 얻어 내야 합니다.


    위 예에서 보시면 대충 아시겠지만 구하고자 하는 뷰페이지링크에 해당하는

    부분이 (?P<links>[^\"]+) 이고,

    제목에 해당하는 부분이 (?P<subjects>[^<]+) 입니다.



2. 뽑아낼 내용의 패턴에는 소괄호(()와 ?P<links> 또는 ?P<subjects> 

    소괄호())로 닫고가 반드시 있어야 합니다.


    이것은 소괄호(하위패턴) 안에 있는 뽑은 값들이 배열로 형성되는데 그 값을 참조하기 위한 키(key)라 

    생각하시면 되겠습니다.


    예를 들어 $matches['links'] , 또는 $matches['subjects'] 이렇게 참조하므로

    인덱스(숫자)로 참조하는 것 보다 가시적으로 편하고 쉽게 알아 볼 수 있습니다.

    그리고 링크와 제목 순서에 상관 없이 가져다 쓸수 있게 되어 편리합니다.



<실전예제>                    


1. 먼저 파싱할 타겟게시판의 리스트페이지로 갑니다. 

    리스트페이지에 여러 제목에 링크가 걸려 있을 텐데 거기서

    각각의 제목과 링크를 추출해 내어야 합니다.



2. 그 페이지에서 마우스오른버튼 클릭하여 페이지소스보기를 클릭합니다.


    페이지소스에서 찾고자 하는 제목과 링크가 있는 위치로 갑니다.


    리스트페이지에 있는 제목과 링크들 중 그 중 하나만 구하면 나머지는 패턴이

    동일하므로 자동으로 구해지죠.




예)그누보드5 리스트페이지


     여기서 중요한 것은 제목과 제목에 걸린 링크입니다. 여기서 링크는 그 제목에

     해당하는 뷰페이지 url입니다.


     소스를 보니 아래와 같은 부분이 제목과 그 링크에 해당됩니다.

     그 부분만 뽑아 패턴을 만들어 보겠습니다. 


<td class="td_subject"> <a href="http://navycolor.com/bbs/board.php?bo_table=free&wr_id=111"> 모바일 글쓰기 테스트</a> </td>



클래스에 td_subject라는 제목을 의미하는 단어가 있습니다. 이 부분이 다른 것과 명확하게

구분되는 것이니 거기서 부터 패턴을 잡으면 되겠네요.


그누파서에서는 패턴구분자로 샾(#)을 사용합니다.

그러니  패턴은

#<td class=\"td_subject\"><a href=\"(?P<links>[^\"]+)\">(?P<subjects>[^<]+)</a><td>#isU


<설명>

문자열 내에 있는 겹따옴표(")앞에는 백슬래시(\)를 붙여 줍니다.

물론 이것뿐 아니라 문자 그 자체가 아닌 어떤 의미가 부여된 메타문자가 메타문자가 아닌 그 문자 자체를 의미하는 경우에는 앞에 백슬래시를 붙여 줘야 합니다.

예를 들어 점(.)이나 수량지시자인 * , + , ? 등은 정규식에서 문자 자체가 아닌 다른

의미가 부여된 문자들입니다. 이 문자들이 그 자체 문자를 나타내고자 할 때는 그 앞에 백슬래시를 붙여 줘야 합니다.


1) 링크구하기


    구하고자 하는 링크가 겹따옴표와 겹따옴표 내에 있네요.

    그럼 그 사이를 소괄호를 묶습니다. 하위패턴subpattern 이라 합니다.


    그리고 구하고자 하는 부분이 링크이므로 괄호 처음에 ?P<links> 그리고

    [^\"]+는 구하고자 하는 링크입니다. 소스상에 링크를 보니 맨 뒤에 

    겹따옴표로 싸여 있고 링크에는 겹따옴표가 없네요. 그렇다면 링크는 겹따옴표가

    아닌 문자들로 이루어져 있음을 알 수 있습니다. 바로 그 점을 이용해 패턴을 

    구성합니다.


    [ ]은 그 사이에 들어 있는 문자 중 하나를 의미합니다.

    예를 들어 [a-zA-Z0-9]라면 소문자 알파벳, 대문자 알파벳 그리고 숫자 중

    하나를 의미한다는거죠.


    그런데 [ 다음에 ^이 나오면 부정을 나타냅니다. 즉, 제외한 문자 중 하나

    예를 들면 [^a-zA-Z]라면 소문자 알파벳도 대문자 알파벳도 아닌 문자 하나라는

    의미를 갖게 되죠.


    그렇다면 [^\"]+는 겹따옴표 아닌 문자 하나, 그리고 플러스(+)는 바로 앞에 

    있는 문자 하나 이상을 뜻합니다.


    즉, 겹따옴표 아닌 문자 하나 이상

    그리고 하위패턴이 끝나면 반드시 소괄호( )로 닫아 주고 그 다음 문자 겹따옴표를

    표기해 줍니다.  \"


2) 제목구하기


    제목구하기도 링크 구하기와 다르지 않습니다.

    반드시 (?P<subjects>로 시작해야 하고 제목이 끝나는 바로 뒤에 <이 나오므로

    < 아닌 문자 여러개로 패턴을 작성하면 되겠네요.


    즉, (?P<subjects>[^<]+)


3) 패턴변경자 ( i , s , U)


    i : 대문자 소문자를 구분하지 않는다. insensitive

    s : 정규식에서 공백을 제외한 모든 문자를 뜻하는 점(.)에 줄바꿈도 포함

    U : ungreedy  패턴을 최소한으로 파악한다. 




댓글목록

등록된 댓글이 없습니다.

Total 11건 1 페이지
그누게시판파서 도움말 목록
번호 제목 글쓴이 조회 날짜
11 패턴 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 990 10-22
10 기타 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 910 10-10
9 패턴 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 928 10-09
8 파싱기사용법 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 903 10-09
7 파싱기사용법 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 672 10-08
6 패턴 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 757 10-08
5 패턴 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 702 10-08
열람중 패턴 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 687 10-08
3 파싱기사용법 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 714 10-08
2 기타 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 705 07-19
1 설치 네이비컬러 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2320 07-13
게시물 검색

공지사항

  • 게시물이 없습니다.

회원로그인

접속자집계

오늘
18
어제
112
최대
393
전체
76,382

그누보드5
Copyright © 소유하신 도메인. All rights reserved.