본문 바로가기

Computer/Programing

정규식

http://regexr.com/



Summary

문자검색

줄바꿈    \r 또는 \n 또는 \r\n #운영체제에 따라 바뀜

숫자       \d 또는 [0-9]

다중선택    \d{10} #숫자가 10자리인 것

또는(or)    (A|B) #A 또는 B

공백    \s


범위선택

특정 라인까지    ((.*\n){5}) #5번째줄까지 선택

시작포함 특정시점 앞까지    STARTHERE([.\s\S]*?)(?=BEFOREHERE)     #STARTHERE포함해서 BEFOREHERE 이전까지 줄바꿈 모두 포함

(.+?)(?=BEFOREHERE)






줄바꿈 제외 bestofbest 와 </td> 사이에 줄바꿈을 제외한 모든 문자, 

<a href=\"\/board\/view.php\?table=bestofbest(.+)<\/td>



줄바꿈 포함 bestofbest 와 </td> 사이에 줄바꿈을 제외한 모든 문자, 

<a href=\"\/board\/view.php\?table=bestofbest((.|\n)*)<\/tr>

<a href=\"\/board\/view.php\?table=bestofbest([\s\S]*)<\/tr>



([\s\S]*)    마지막항목까지 검색

\s(\w+)$    마지막 텍스트 선택

(.*?)(?=UPTOHERE)    uptohere 이전까지 선택



(x|y)    x 또는 y 에 만족할시에



 표현식
의미 
 ^x
 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다.
x$
 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다.
 .x
 임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다.
 x+
 반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다.
 x?
 존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다.
 x*
 반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다.
 x|y
 or 를 표현하며 x 또는 y 문자가 존재함을 의미한다.
 (x)
그룹을 표현하며 x 를 그룹으로 처리함을 의미한다.
 (x)(y)
그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다.
 (x)(?:y)
그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. 
 x{n}
 반복을 표현하며 x 문자가 n번 반복됨을 의미한다.
 x{n,}
 반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다.
 x{n,m}
 반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다.


 표현식
의미 
[xy]
문자 선택을 표현하며 x 와 y 중에 하나를 의미한다.
 [^xy]
not 을 표현하며  x 및 y 를 제외한 문자를 의미한다.
 [x-z]
range를 표현하며 x ~ z 사이의 문자를 의미한다. 
 \^
escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
 \b
word boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
 \B
non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다.
 \d
digit 를 표현하며 숫자를 의미한다. 
 \D
non digit 를 표현하며 숫자가 아닌 것을 의미한다. 
 \s
space 를 표현하며 공백 문자를 의미한다. 
 \S
non space를 표현하며 공백 문자가 아닌 것을 의미한다.
 \t
tab 을 표현하며 탭 문자를 의미한다.
 \v
vertical tab을 표현하며 수직 탭(?) 문자를 의미한다.
 \w
word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. 
 \W
non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. 


출처: http://hamait.tistory.com/342 [HAMA 블로그]








예제

\n[0-9]\s([.\s\S]*?)((?=\n\d{1}\s)|(?=\_\_\_\_)) 

줄바꾸고첫번째는 숫자고, 공백 후에 줄바꿈 포함으로 있다가 줄바꿈 공백 이전 또는 ___ 이전까지 포함


[+-]?(?=\.\d|\d)(?:\d+)?(?:\.?\d*)(?:[eE][+-]?\d+)?    

정수든 소수든 모든 숫자를 선택




$cng = '((Bill\s)([.\s\S]*?)(?=\_{95}))';

$remove1 = preg_replace($cng,"",$list);

"Bill(스페이스)부터  _ 95개 이전까지 문자를 찾아서 공백으로 변환

[0-9]{10}
숫자가 10개 연속으로 




파이썬에서 \ 문자 포함여부

포함

\"

\/

미포함

<

>






<([^>]+)>    "< >" 안의 내용을 선택 : html 코드를 없앨때 유용
\s           줄바꿈
^            패턴의 시작
$            패턴의 끝
\1           기존의 문자 입력
\n
           줄바꿈


include 'class.snoopy.php';

$snoopy=new snoopy;

$snoopy->fetch("http://moonseller.net");

$txt=$snoopy->results;

$rex="/[0-9]{4}/";

preg_match_all($rex,$txt,$o);

print_r($o);


I found a short script for counting and displaying ONLY links from a string :

preg_match_all('/<a href="(.*)">/',$post_content,$a);



링크부분만 가져오기

$rex="'<a href=\"(.+)<\/a>'i";


전화번호만 뽑아내기

$rex="/[0-9]{3}-[0-9]{4}-[0-9]{4}/"

이메일만 뽑아내기
요즘엔 이런식으로 이메일 수집을 못하게 이미지로 처리하는 경우가 많다.

$rex="/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/";

특정태그로 둘러 쌓인 내용만 뽑아내기

이 녀석이 핵심이다. 보통 영어로만 된 경우에는 [A-Za-z]* 라고 하면 되는데, 한글일 경우 참으로 애매해진다. 그럴때 아래와 같은 꽁수(?)를 쓴다.

$rex="/\<span id=\"moonseller\"\>[>^]\<\/span\>/";

이정도만 하면 왠만한 사이트들은 다 긁어 올수 있다.


// iframe 제거
$str = preg_replace("!<iframe(.*?)</iframe>!is","",$str);

// script 제거
$str = preg_replace("!<script(.*?)</script>!is","",$str);

// meta 제거
$str = preg_replace("!<meta(.*?)>!is","",$str);

// style 태그 제거
$str = preg_replace("!<style(.*?)</style>!is","",$str);

//   를 공백으로 변환
$str = str_replace(" "," ",$str);

// 연속된 공백 1개로
$str = preg_replace("/s{2,}/"," ",$str);

// 태그안에 style= 속성 제거
$str = preg_replace("/ style=([^&#92;"&#92;'+) /","",$str);   // style-border:0... 따옴표가 없을때
$str = preg_replace("/ style=(&#92;"&#92;')?(^&#92;"&#92;'+)(&#92;"&#92;')?/",""$str);   // style="border:0..." 따옴표가 있을때

// 태그안의 width= / height= 속성제거
$str = preg_replace("/ width=(&#92;"&#92;')?&#92;d+(&#92;"&#92;')?/","",$str);
$str = preg_replace("/ height=(&#92;"&#92;')?&#92;d+(&#92;"&#92;')?/","",$str);

// img 태그 추출 src 추출
preg_match("/ <img[^>*src=[&#92;"']?([^>&#92;"']+)[&#92;"']?[^>*>/i",$str,$result);
preg_match_all("/ <img[^>*src=[&#92;"']?([^>&#92;"']+)[&#92;"']?[^>*>/i",$str,$result);