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
'정규표현식' 카테고리의 다른 글
JQuery 정규표현식을 활용한 페이징 처리(전방탐색, 후방탐색X) (0) | 2021.08.08 |
---|---|
parse MAC Address using Java Regular Expression (0) | 2021.08.07 |
폰번호, 아이디, 이메일, 성명 등 마스킹처리 (PHP 정규표현식) (0) | 2021.07.28 |
55에서 255까지의 범위 정규식 (PHP 정규표현식) (0) | 2021.07.28 |
전화번호 추출 PHP 정규표현식 예제 (0) | 2021.07.27 |