리스트패턴구하기 gnuParser
파싱하고자 하는 모든 게시판은 패턴이 서로 다르다는 가정하에서 시작하는 것이 좋습니다.
같은 그누보드라도 사용자에 따라 커스터마이징이 됐을 수 있기 때문이죠.
여기에서는 실제 잘 작동되고 있는 타겟리스트의 리스트패턴을 가지고 설명드리겠습니다.
실제 적용하실 때도 여기서 설명하는 대로 적용하셔야 합니다.
그렇지 않고 다른 곳에서 설명하는 방식으로 작성하시면 작동되지 않습니다.
이건 패턴을 좀 더 쉽게 작성하시게 할 목적으로 그러니 양해 바랍니다.
<리스트패턴>
#<td\sclass=\"tdnum\">\d+</td>\s+<td\sclass=\"tdsub\s(?:new|old)\"><a\shref=\"(?P<links>[^\"]+)\"[^>]+>(?P<subjects>[^<]+)<#isxU |
1. 먼저 리스트패턴에서는 게시판의 리스트들에서 각각의 뷰페이지링크와
제목을 얻어 내야 합니다.
위 예에서 보시면 대충 아시겠지만 구하고자 하는 뷰페이지링크에 해당하는
부분이 (?P<links>[^\"]+) 이고,
제목에 해당하는 부분이 (?P<subjects>[^<]+) 입니다.
2. 뽑아낼 내용의 패턴에는 소괄호(()와 ?P<links> 또는 ?P<subjects>
소괄호())로 닫고가 반드시 있어야 합니다.
이것은 소괄호(하위패턴) 안에 있는 뽑은 값들이 배열로 형성되는데 그 값을 참조하기 위한 키(key)라
생각하시면 되겠습니다.
예를 들어 $matches['links'] , 또는 $matches['subjects'] 이렇게 참조하므로
인덱스(숫자)로 참조하는 것 보다 가시적으로 편하고 쉽게 알아 볼 수 있습니다.
그리고 링크와 제목 순서에 상관 없이 가져다 쓸수 있게 되어 편리합니다.
<실전예제> gnuParser patternTester
그누파서(gnuParser )의 패턴테스터기를 사용하시면 쉽게 확인해 볼 수 있습니다.
관리자모드 해당 리스트 수정의 패턴 영역에 링크되어 있습니다.
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 패턴을 최소한으로 파악한다.
'PHP > 그누보드5' 카테고리의 다른 글
정규표현식 기초 1,2 gnuParser (0) | 2019.01.12 |
---|---|
첨부파일패턴구하기 gnuParser (0) | 2019.01.12 |
뷰패턴구하기 gnuParser (0) | 2019.01.12 |
그누보드5 서버이전후 캡챠 및 로그인 오류시 (0) | 2018.09.26 |
그누보드5 포인트에 따라 자동 등업 소스 (0) | 2017.09.25 |
그누보드5 iframe 입력되도록 바꾸는 방법 (0) | 2017.09.24 |
리스트패턴구하기 gnuParser
파싱하고자 하는 모든 게시판은 패턴이 서로 다르다는 가정하에서 시작하는 것이 좋습니다.
같은 그누보드라도 사용자에 따라 커스터마이징이 됐을 수 있기 때문이죠.
여기에서는 실제 잘 작동되고 있는 타겟리스트의 리스트패턴을 가지고 설명드리겠습니다.
실제 적용하실 때도 여기서 설명하는 대로 적용하셔야 합니다.
그렇지 않고 다른 곳에서 설명하는 방식으로 작성하시면 작동되지 않습니다.
이건 패턴을 좀 더 쉽게 작성하시게 할 목적으로 그러니 양해 바랍니다.
<리스트패턴>
#<td\sclass=\"tdnum\">\d+</td>\s+<td\sclass=\"tdsub\s(?:new|old)\"><a\shref=\"(?P<links>[^\"]+)\"[^>]+>(?P<subjects>[^<]+)<#isxU |
1. 먼저 리스트패턴에서는 게시판의 리스트들에서 각각의 뷰페이지링크와
제목을 얻어 내야 합니다.
위 예에서 보시면 대충 아시겠지만 구하고자 하는 뷰페이지링크에 해당하는
부분이 (?P<links>[^\"]+) 이고,
제목에 해당하는 부분이 (?P<subjects>[^<]+) 입니다.
2. 뽑아낼 내용의 패턴에는 소괄호(()와 ?P<links> 또는 ?P<subjects>
소괄호())로 닫고가 반드시 있어야 합니다.
이것은 소괄호(하위패턴) 안에 있는 뽑은 값들이 배열로 형성되는데 그 값을 참조하기 위한 키(key)라
생각하시면 되겠습니다.
예를 들어 $matches['links'] , 또는 $matches['subjects'] 이렇게 참조하므로
인덱스(숫자)로 참조하는 것 보다 가시적으로 편하고 쉽게 알아 볼 수 있습니다.
그리고 링크와 제목 순서에 상관 없이 가져다 쓸수 있게 되어 편리합니다.
<실전예제> gnuParser patternTester
그누파서(gnuParser )의 패턴테스터기를 사용하시면 쉽게 확인해 볼 수 있습니다.
관리자모드 해당 리스트 수정의 패턴 영역에 링크되어 있습니다.
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 패턴을 최소한으로 파악한다.
'PHP > 그누보드5' 카테고리의 다른 글
정규표현식 기초 1,2 gnuParser (0) | 2019.01.12 |
---|---|
첨부파일패턴구하기 gnuParser (0) | 2019.01.12 |
뷰패턴구하기 gnuParser (0) | 2019.01.12 |
그누보드5 서버이전후 캡챠 및 로그인 오류시 (0) | 2018.09.26 |
그누보드5 포인트에 따라 자동 등업 소스 (0) | 2017.09.25 |
그누보드5 iframe 입력되도록 바꾸는 방법 (0) | 2017.09.24 |