728x90

정규표현식에서 원하는 문자열만 찾아내고 싶을 때 후방탐색으로 특정문자열 뒷부분을 찾고, 전방탐색으로 특정문자열 앞부분을 찾는다.

(?<=문자열)

(?=문자열)

<?php
$str = "https://link2me.tistory.com/1100";
preg_match_all("/(?<=\/\/).+(?=\/)/" ,$str,$out);
echo '<pre>';print_r($out[0]);echo '</pre>';
 
preg_match_all("/.+(?=\/)/" ,$str,$out);
echo '<pre>';print_r($out[0]);echo '</pre>';
 
/*
 
(?<=ABC) → 후방탐색(Positive lookbehind) : 해당 문자열(ABC)을 기준으로 뒷부분을 찾는다.
 여기서는 // 를 기준으로 뒷부분을 찾아라.
 
(?=ABC) → 전방탐색(Positive lookahead) : 해당 문자열(ABC)을 기준으로 앞부분을 찾는다.
 여기서는 /를 기준으로 앞부분을 찾아라.
 
[] : 대괄호 사이에 존재하는 문자들중 하나에 일치
+ : 1개 이상
* : 0 개 이상 
? : 0 또는 하나
 
*/
 
$str = "https://link2me.tistory.com/dosomething.php?name=bar&shop=shirt";
preg_match_all("/(?<=\?)([-\w]+=[-\w]+&?)+/" ,$str,$out);
echo '<pre>';print_r($out[0]);echo '</pre>';
 
/*
? 기준으로 뒷부분을 찾아라. '변수명=값' 영역
w : 영문자, 숫자, _, 기타 스크립트 문자
 
*/
?>

 

특정 문자열 부분만 발췌하여 삭제하고 싶다면...

https://regexr.com/ 에서 원하는 정규표현식인지 검증하면서 확인하면 된다.

 

"/(?<=\s)(\([\d]+\))+/" : 공백 뒷부분에서 (숫자)로 된 부분만 찾아내라.

 

<?php
$str = "(한글) (영어) (121) 제목";
preg_match_all("/(?<=\s)(\([\d]+\))+/" ,$str,$out);
echo '<pre>';print_r($out[0]);echo '</pre>';
 
$out = preg_replace("/(?<=\s)(\([\d]+\))+/","",$str);
$out = preg_replace("/\s{2,}/"," ",$out);
echo $out.'<br/>';
 
/*
 
(?<=ABC) → 후방탐색(Positive lookbehind) : 해당 문자열(ABC)을 기준으로 뒷부분을 찾는다.
 여기서는 // 를 기준으로 뒷부분을 찾아라.
 
(?=ABC) → 전방탐색(Positive lookahead) : 해당 문자열(ABC)을 기준으로 앞부분을 찾는다.
 여기서는 /를 기준으로 앞부분을 찾아라.
 
() : ()안에 있는 문자들의 그룹화
[] : 대괄호 사이에 존재하는 문자들중 하나에 일치
+ : 1개 이상
* : 0 개 이상 
? : 0 또는 하나
 
그룹의 값 사용(\1, \2, …)
 
*/
 
$str = "I paid $30 for 50 apples.";
preg_match_all("/\b(?<!\$)[\d]+\b/" ,$str,$out);
echo '<pre>';print_r($out[0]);echo '</pre>';
 
// https://regexr.com/ 에서 테스트한 결과와 다르게 정확한 결과를 반환하지 못하는 거 같다.
?>
 

 

/[^>]*/ 는 '>' 을 제외한 *모든 것

 

728x90
블로그 이미지

Link2Me

,